git Cheatsheet

Veröffentlicht: Lesedauer: 9 Min.

Cheatsheet Git

Einrichten · Repository anlegen · Lokale Änderungen · Committen · Dateien verschieben und entfernen · Historie · Branches · Tags · Remote · Merge und Rebase · Stash · Rückgängig machen · Suchen · Ignorieren · Aliases · git flow · Gute Praxis · Quellen

Einrichten

Einrichten
Befehl Wirkung
git config --global user.name "Vorname Nachname" Name für alle Commits festlegen
git config --global user.email "mail@example.com" E-Mail für alle Commits festlegen
git config --global core.editor vi Editor für Commit-Nachrichten
git config --global merge.tool meld Werkzeug für Merge-Konflikte
git config --global color.ui auto Farbige Ausgabe im Terminal
git config --list Alle wirksamen Einstellungen anzeigen
git config --global --list Nur die Einstellungen des Benutzers (~/.gitconfig)
git config --local --list Nur die Einstellungen des Repositorys (.git/config)
git config --system --list Nur die systemweiten Einstellungen
git help <befehl> Hilfe zu einem Befehl

Repository anlegen

Repository anlegen
Befehl Wirkung
git init Aktuelles Verzeichnis zum Repository machen
git init <verzeichnis> Neues Verzeichnis als Repository anlegen
git clone <url> Bestehendes Repository kopieren, per https:// oder ssh://

Lokale Änderungen

Lokale Änderungen
Befehl Wirkung
git status Geänderte, neue und vorgemerkte Dateien
git diff Änderungen, die noch nicht vorgemerkt sind
git diff <datei> Dasselbe für eine Datei
git diff --staged Vorgemerkte Änderungen, also der nächste Commit
git add <datei> Datei für den nächsten Commit vormerken
git add . Alle Änderungen im Verzeichnis vormerken
git add -p <datei> Änderungen stückweise auswählen und vormerken
git reset <datei> Datei aus der Vormerkung nehmen, Änderung bleibt erhalten

Committen

Committen
Befehl Wirkung
git commit Vorgemerkte Änderungen committen, Nachricht im Editor
git commit -m "Nachricht" Dasselbe mit Nachricht direkt
git commit -a Alle Änderungen an bekannten Dateien ohne add committen
git commit -am "Nachricht" -a und -m kombiniert
git commit --amend Letzten Commit ändern (Nachricht oder Inhalt)
git commit --amend --no-edit Vorgemerktes in den letzten Commit, Nachricht bleibt
git commit --amend --date="<datum>" Datum des letzten Commits ändern

Bereits veröffentlichte Commits nicht mehr mit --amend ändern: Andere haben sie schon.

Dateien verschieben und entfernen

Dateien verschieben und entfernen
Befehl Wirkung
git mv <alt> <neu> Datei umbenennen oder verschieben und vormerken
git rm <datei> Datei löschen und das Löschen vormerken
git rm --cached <datei> Datei aus git entfernen, auf der Platte behalten

Historie

Historie
Befehl Wirkung
git log Alle Commits, neueste zuerst
git log --oneline Ein Commit pro Zeile
git log -p <datei> Änderungen an einer Datei über alle Commits
git log --follow <datei> Historie einer Datei, auch über Umbenennungen hinweg
git log --author="name" Nur Commits einer Person
git log main..feature Commits in feature, die in main fehlen
git log --oneline <a>..<b> --left-right Unterschiede zweier Branches mit Richtungspfeilen
git diff <branch1>...<branch2> Inhaltlicher Unterschied zweier Branches
git show <commit> Inhalt und Metadaten eines Commits
git blame <datei> Wer hat welche Zeile wann geändert
git reflog Jede Bewegung von HEAD, auch verworfene Commits

Branches

Branches
Befehl Wirkung
git branch Lokale Branches auflisten
git branch -r Remote-Branches auflisten
git branch -av Alle Branches mit letztem Commit
git branch --merged Branches, die schon gemergt sind
git branch <name> Neuen Branch anlegen, ohne zu wechseln
git switch <name> Zu einem Branch wechseln (älter: git checkout <name>)
git switch -c <name> Neuen Branch anlegen und wechseln (älter: git checkout -b)
git switch - Zurück zum vorherigen Branch
git checkout -b <neu> <basis> Neuen Branch auf Basis eines anderen anlegen
git checkout <commit> -b <neu> Neuen Branch ab einem bestimmten Commit
git checkout --track <remote>/<branch> Lokalen Branch anlegen, der einem Remote-Branch folgt
git branch -m <neuer-name> Aktuellen Branch umbenennen
git branch -d <name> Gemergten Branch löschen
git branch -D <name> Branch löschen, auch wenn nicht gemergt

Tags

Tags
Befehl Wirkung
git tag Tags auflisten
git tag -n Tags mit Nachricht auflisten
git tag <name> Einfachen Tag auf den aktuellen Commit setzen
git tag -a <name> -m "Nachricht" Annotierten Tag mit Nachricht setzen
git push --tags Alle Tags veröffentlichen

Remote

Remote
Befehl Wirkung
git remote -v Alle Remotes mit URL
git remote show <remote> Details zu einem Remote
git remote add <name> <url> Remote hinzufügen
git remote rename <alt> <neu> Remote umbenennen
git remote rm <name> Remote entfernen
git fetch <remote> Änderungen holen, aber nicht einarbeiten
git pull Holen und in den aktuellen Branch mergen
git pull --rebase <remote> <branch> Holen und eigene Commits obendrauf setzen
git push <remote> <branch> Lokale Commits hochladen
git push <remote> --delete <branch> Branch auf dem Remote löschen
git branch -dr <remote>/<branch> Nur die lokale Kopie eines Remote-Branches löschen

Merge und Rebase

Merge und Rebase
Befehl Wirkung
git merge <branch> <branch> in den aktuellen Branch mergen
git rebase <branch> Eigene Commits auf <branch> neu aufsetzen
git rebase -i <commit> Commits nach <commit> umordnen, zusammenfassen oder umschreiben
git rebase --continue Nach gelöstem Konflikt weitermachen
git rebase --abort Rebase abbrechen, alter Stand ist wieder da
git mergetool Konflikte im eingestellten Werkzeug lösen
git cherry-pick <commit> Einzelnen Commit in den aktuellen Branch übernehmen

Einen gelösten Konflikt markierst Du mit git add <datei>. Commits, die schon veröffentlicht sind, nicht rebasen.

Stash

Stash
Befehl Wirkung
git stash Unfertige Änderungen beiseitelegen
git stash push -m "Nachricht" Dasselbe mit Beschreibung (älter: git stash save)
git stash list Alle Stashes anzeigen
git stash show stash@{0} Inhalt eines Stashes
git stash pop Neuesten Stash zurückholen und entfernen
git stash apply stash@{n} Stash zurückholen, aber behalten
git stash drop stash@{n} Stash löschen (ohne Angabe: den neuesten)
git stash clear Alle Stashes löschen
git stash branch <name> stash@{0} Neuen Branch aus einem Stash anlegen

Rückgängig machen

Rückgängig machen
Befehl Wirkung
git restore <datei> Ungespeicherte Änderungen einer Datei verwerfen (älter: git checkout HEAD <datei>)
git checkout <branch> -- <datei> Datei im Stand eines anderen Branches holen
git reset --hard HEAD Alle lokalen Änderungen verwerfen
git revert <commit> Neuer Commit, der <commit> aufhebt, Historie bleibt
git reset <commit> HEAD zurücksetzen, Änderungen bleiben als ungespeichert erhalten
git reset --keep <commit> HEAD zurücksetzen, nicht committete Änderungen bleiben
git reset --hard <commit> HEAD zurücksetzen, alles danach verwerfen
git reset --hard <remote>/<branch> Lokalen Branch exakt auf den Remote-Stand setzen

reset --hard löscht Arbeit endgültig. Was nur committet war, findet sich meist noch über git reflog.

Suchen

Suchen
Befehl Wirkung
git grep "text" Text in allen Dateien suchen
git grep "text" v2.5 Text in einer bestimmten Version suchen
git log -S "text" Commits finden, die text hinzufügen oder entfernen
git log -S "muster" --pickaxe-regex Dasselbe mit regulärem Ausdruck

Ignorieren

Ignorieren
Befehl Wirkung
git ls-files --others --ignored --exclude-standard Alle ignorierten Dateien anzeigen
git rm -r --cached . Alles aus dem Index nehmen, danach git add .: neue .gitignore greift auch für schon verfolgte Dateien

Aliases

Aliases
Befehl Kurzform danach
git config --global alias.st status git st
git config --global alias.co checkout git co
git config --global alias.br branch git br
git config --global alias.ci commit git ci
git config --global alias.unstage 'reset HEAD --' git unstage <datei>
git config --global alias.last 'log -1 HEAD' git last

git flow

git flow ist eine Erweiterung für einen festen Branch-Ablauf mit develop, Feature-, Release- und Hotfix-Branches.

git flow
Befehl Wirkung
git flow init Im Repository einrichten (-d übernimmt die Vorgaben)
git flow feature start <name> Feature-Branch von develop anlegen
git flow feature finish <name> Feature in develop mergen und Branch löschen
git flow feature publish <name> Feature auf den Remote hochladen
git flow feature track <name> Veröffentlichtes Feature lokal verfolgen
git flow release start <version> Release-Branch von develop anlegen
git flow release publish <version> Release hochladen
git flow release finish <version> Release in main und develop mergen und taggen
git flow hotfix start <version> Hotfix-Branch von main anlegen
git flow hotfix finish <version> Hotfix in main und develop mergen und taggen

Gute Praxis

Quellen

  1. Git Cheat Sheet Deutsch von Arslan Bilal auf GitHub
  2. Git Cheat Sheet von Tower (PDF, im Wiki der Jade Hochschule)
  3. GitHub Git Spickzettel von GitHub Training

Letzte Anpassung: ↑ zum Anfang