Files
Git-CheatSheet/README.md
2026-02-04 13:30:54 +00:00

10 KiB

Git CheatSheet

Übersicht der wichtigsten Git-Befehle mit praktischen Beispielen.


Repository erstellen & klonen

# Neues Repository im aktuellen Verzeichnis initialisieren
git init

# Neues Repository mit Verzeichnis erstellen
git init mein-projekt

# Bestehendes Repository klonen
git clone https://github.com/user/repo.git

# Klonen in ein bestimmtes Verzeichnis
git clone https://github.com/user/repo.git mein-ordner

# Nur den neuesten Commit klonen (shallow clone)
git clone --depth 1 https://github.com/user/repo.git

Konfiguration

# Benutzername setzen (global)
git config --global user.name "Max Mustermann"

# E-Mail setzen (global)
git config --global user.email "max@example.com"

# Konfiguration nur für aktuelles Repo
git config user.name "Max Mustermann"

# Alle Einstellungen anzeigen
git config --list

# Standard-Branch-Name setzen
git config --global init.defaultBranch main

# Editor festlegen
git config --global core.editor "code --wait"

# Aliase erstellen
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"

Status & Änderungen

# Aktuellen Status anzeigen
git status

# Kurzform des Status
git status -s

# Änderungen anzeigen (noch nicht gestaged)
git diff

# Änderungen anzeigen (bereits gestaged)
git diff --staged

# Änderungen einer bestimmten Datei
git diff datei.txt

# Vergleich zwischen zwei Branches
git diff main..feature-branch

# Vergleich zwischen zwei Commits
git diff abc123 def456

Dateien hinzufügen (Staging)

# Einzelne Datei hinzufügen
git add datei.txt

# Mehrere Dateien hinzufügen
git add datei1.txt datei2.txt

# Alle Dateien im aktuellen Verzeichnis
git add .

# Alle Änderungen (inkl. gelöschte Dateien)
git add -A

# Interaktiv Teile einer Datei hinzufügen
git add -p datei.txt

# Dateien nach Muster hinzufügen
git add *.js
git add src/

Commits

# Commit mit Nachricht
git commit -m "Kurze Beschreibung der Änderung"

# Alle geänderten Dateien committen (ohne git add)
git commit -am "Änderungen committen"

# Letzten Commit ändern (Nachricht oder Dateien)
git commit --amend -m "Neue Nachricht"

# Leeren Commit erstellen (z.B. für CI-Trigger)
git commit --allow-empty -m "Trigger CI"

# Commit mit mehrzeiliger Nachricht
git commit -m "Titel" -m "Detaillierte Beschreibung"

Branches

# Alle lokalen Branches anzeigen
git branch

# Alle Branches (lokal + remote)
git branch -a

# Neuen Branch erstellen
git branch feature-login

# Branch erstellen und wechseln
git checkout -b feature-login
# oder (neuere Syntax)
git switch -c feature-login

# Zu einem Branch wechseln
git checkout main
# oder
git switch main

# Branch umbenennen
git branch -m alter-name neuer-name

# Branch löschen (lokal)
git branch -d feature-login

# Branch löschen (forciert, auch ungemergte)
git branch -D feature-login

# Remote-Branch löschen
git push origin --delete feature-login

Merging

# Branch in aktuellen Branch mergen
git merge feature-login

# Merge ohne Fast-Forward (behält Branch-Historie)
git merge --no-ff feature-login

# Merge abbrechen (bei Konflikten)
git merge --abort

# Merge-Konflikte anzeigen
git diff --name-only --diff-filter=U

Rebasing

# Aktuellen Branch auf main rebasen
git rebase main

# Interaktives Rebase (letzte 3 Commits)
git rebase -i HEAD~3

# Rebase abbrechen
git rebase --abort

# Nach Konfliktlösung fortfahren
git rebase --continue

# Einzelnen Commit überspringen
git rebase --skip

Remote-Repositories

# Remote-Repositories anzeigen
git remote -v

# Neues Remote hinzufügen
git remote add origin https://github.com/user/repo.git

# Remote-URL ändern
git remote set-url origin https://github.com/user/neues-repo.git

# Remote entfernen
git remote remove origin

# Remote umbenennen
git remote rename origin upstream

Push & Pull

# Änderungen pushen
git push origin main

# Ersten Push mit Upstream setzen
git push -u origin main

# Danach reicht:
git push

# Force-Push (Vorsicht!)
git push --force
# Sicherer:
git push --force-with-lease

# Änderungen holen und mergen
git pull

# Änderungen holen ohne Merge
git fetch

# Alle Remotes fetchen
git fetch --all

# Mit Rebase statt Merge
git pull --rebase

Stashing (Änderungen zwischenspeichern)

# Aktuelle Änderungen stashen
git stash

# Stash mit Beschreibung
git stash save "Arbeit an Feature X"

# Auch untracked Dateien stashen
git stash -u

# Stash-Liste anzeigen
git stash list

# Letzten Stash anwenden und behalten
git stash apply

# Letzten Stash anwenden und löschen
git stash pop

# Bestimmten Stash anwenden
git stash apply stash@{2}

# Stash löschen
git stash drop stash@{0}

# Alle Stashes löschen
git stash clear

# Stash als neuen Branch
git stash branch neuer-branch

Historie & Logs

# Commit-Historie anzeigen
git log

# Kompakte Ansicht
git log --oneline

# Mit Graph
git log --oneline --graph --all

# Letzte n Commits
git log -5

# Commits eines Autors
git log --author="Max"

# Commits in Zeitraum
git log --since="2024-01-01" --until="2024-12-31"

# Commits mit bestimmtem Text
git log --grep="bugfix"

# Änderungen in Datei verfolgen
git log -p datei.txt

# Wer hat welche Zeile geändert
git blame datei.txt

# Kurze Statistik
git log --stat

# Änderungen pro Autor
git shortlog -sn

Rückgängig machen

# Unstaged Änderungen verwerfen
git checkout -- datei.txt
# oder (neuere Syntax)
git restore datei.txt

# Staged Datei zurück zu unstaged
git reset HEAD datei.txt
# oder
git restore --staged datei.txt

# Letzten Commit rückgängig (behält Änderungen)
git reset --soft HEAD~1

# Letzten Commit rückgängig (verwirft Änderungen)
git reset --hard HEAD~1

# Zu bestimmtem Commit zurück
git reset --hard abc1234

# Commit rückgängig machen (neuer Commit)
git revert abc1234

# Alle lokalen Änderungen verwerfen
git checkout .
git clean -fd

Tags

# Alle Tags anzeigen
git tag

# Lightweight Tag erstellen
git tag v1.0.0

# Annotated Tag mit Nachricht
git tag -a v1.0.0 -m "Version 1.0.0 Release"

# Tag für älteren Commit
git tag -a v0.9.0 abc1234 -m "Nachträglicher Tag"

# Tags pushen
git push origin v1.0.0

# Alle Tags pushen
git push origin --tags

# Tag löschen (lokal)
git tag -d v1.0.0

# Tag löschen (remote)
git push origin --delete v1.0.0

# Zu Tag wechseln
git checkout v1.0.0

Cherry-Pick

# Einzelnen Commit in aktuellen Branch übernehmen
git cherry-pick abc1234

# Mehrere Commits
git cherry-pick abc1234 def5678

# Cherry-Pick ohne Commit (nur Änderungen übernehmen)
git cherry-pick -n abc1234

# Bei Konflikten fortfahren
git cherry-pick --continue

# Cherry-Pick abbrechen
git cherry-pick --abort

Suchen

# In Dateien suchen
git grep "suchbegriff"

# Mit Zeilennummern
git grep -n "suchbegriff"

# In bestimmtem Commit suchen
git grep "suchbegriff" abc1234

# Commit finden, der einen Bug eingeführt hat
git bisect start
git bisect bad                  # Aktueller Commit ist kaputt
git bisect good abc1234         # Dieser Commit war noch OK
# Git führt dich durch die Commits
git bisect reset                # Beenden

Aufräumen

# Untracked Dateien anzeigen
git clean -n

# Untracked Dateien löschen
git clean -f

# Auch Verzeichnisse
git clean -fd

# Auch ignorierte Dateien
git clean -fdx

# Nicht mehr existierende Remote-Branches entfernen
git fetch --prune

# Alte Objekte aufräumen
git gc

# Aggressive Aufräumung
git gc --aggressive

Submodules

# Submodule hinzufügen
git submodule add https://github.com/user/lib.git libs/lib

# Submodules beim Klonen initialisieren
git clone --recurse-submodules https://github.com/user/repo.git

# Submodules nachträglich initialisieren
git submodule init
git submodule update

# Alle Submodules aktualisieren
git submodule update --remote

# Submodule entfernen
git submodule deinit libs/lib
git rm libs/lib

Nützliche Kombinationen

# Letzten Commit-Hash anzeigen
git rev-parse HEAD

# Aktuellen Branch-Namen anzeigen
git branch --show-current

# Anzahl Commits zählen
git rev-list --count HEAD

# Alle Dateien eines Commits auflisten
git diff-tree --no-commit-id --name-only -r abc1234

# Änderungen seit letztem Tag
git log $(git describe --tags --abbrev=0)..HEAD --oneline

# Dateien im Staging-Bereich anzeigen
git diff --cached --name-only

# Lokale Branches ohne Remote löschen
git fetch -p && git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -D

.gitignore Beispiele

# Verzeichnisse
node_modules/
vendor/
.idea/
.vscode/

# Dateitypen
*.log
*.tmp
*.cache

# Spezifische Dateien
.env
.DS_Store
Thumbs.db

# Ausnahmen (nicht ignorieren)
!wichtig.log

# Muster
**/logs/
debug[0-9].log

Häufige Workflows

Feature-Branch Workflow

git checkout main
git pull
git checkout -b feature/neue-funktion
# ... Änderungen ...
git add .
git commit -m "Neue Funktion implementiert"
git push -u origin feature/neue-funktion
# Pull Request erstellen, dann:
git checkout main
git pull
git branch -d feature/neue-funktion

Hotfix Workflow

git checkout main
git pull
git checkout -b hotfix/kritischer-bug
# ... Fix ...
git commit -am "Kritischen Bug behoben"
git checkout main
git merge hotfix/kritischer-bug
git tag -a v1.0.1 -m "Hotfix Release"
git push origin main --tags
git branch -d hotfix/kritischer-bug

Rebase vor Merge

git checkout feature-branch
git fetch origin
git rebase origin/main
# Konflikte lösen falls nötig
git push --force-with-lease

Tipps

  • Commit oft: Kleine, fokussierte Commits sind besser als große.
  • Aussagekräftige Nachrichten: Was wurde geändert und warum?
  • Branches nutzen: Nie direkt auf main/master entwickeln.
  • Vor Push prüfen: git log origin/main..HEAD zeigt ausstehende Commits.
  • Backup vor Reset: Bei --hard gehen Änderungen verloren!
  • Force-Push vermeiden: Nur auf eigenen Feature-Branches.

Erstellt: 04 Februar 2026