Git-Befehle: Cheat Sheet mit Beispielen für jeden Tag
Die wichtigsten Git-Befehle sind git init und git clone zum Anlegen eines Repositorys, git status, git add und git commit zum Speichern von Änderungen, git branch, git switch und git merge für die Arbeit mit Branches, git push, git fetch und git pull für die Synchronisation mit dem Server sowie git restore, git reset und git revert zum Rückgängigmachen von Änderungen.
Hier finden Sie ein praxistaugliches Git Cheat Sheet: Die Befehle sind nach Aufgaben gruppiert, zu jedem gibt es ein Beispiel und eine kurze Erklärung. Am besten lassen Sie es neben dem Terminal offen – fast alles, was ein Entwickler im Laufe eines Tages mit Git macht, passt in 20–30 Befehle aus diesen Tabellen.
Damit die Befehle Sinn ergeben, behalten Sie drei Bereiche im Kopf: das Arbeitsverzeichnis (die Dateien auf der Festplatte), den Index bzw. die Staging Area (was in den nächsten Commit kommt) und das Repository (die Commit-Historie im Ordner .git). Die meisten Git-Befehle verschieben Änderungen zwischen diesen drei Bereichen oder zwischen lokalem und Remote-Repository.
Git konfigurieren
Diese Befehle führen Sie einmal nach der Installation aus. Das Flag --global schreibt die Einstellungen in ~/.gitconfig und gilt für alle Repositories des Benutzers; ohne das Flag nur für das aktuelle Repository.
| Befehl | Was er macht |
|---|---|
git config --global user.name "Max Mustermann" | Name des Commit-Autors |
git config --global user.email "max@example.com" | E-Mail des Commit-Autors |
git config --global init.defaultBranch main | Name des Standard-Branches für neue Repositories |
git config --global core.editor "code --wait" | Editor für Commit-Messages (hier VS Code) |
git config --global pull.rebase false | Standardverhalten von git pull – Merge |
git config --global core.autocrlf input | CRLF beim Commit in LF umwandeln (macOS/Linux; unter Windows meist true) |
git config --list --show-origin | Alle Einstellungen samt Datei anzeigen, aus der sie stammen |
git config --global alias.st status | Alias: git st statt git status |
git --version | Version des installierten Git |
git help commit | Vollständige Hilfe zum Befehl (oder git commit -h für die Kurzfassung) |
Repository anlegen und klonen
| Befehl | Was er macht |
|---|---|
git init | Legt ein leeres Repository (Ordner .git) im aktuellen Verzeichnis an |
git init my-project | Legt das Verzeichnis my-project und darin ein Repository an |
git clone https://github.com/user/repo.git | Kopiert ein Remote-Repository mit der gesamten Historie |
git clone git@github.com:user/repo.git app | Klont per SSH in den Ordner app |
git clone --depth 1 URL | Shallow Clone: nur der letzte Commit, schnell und platzsparend |
git clone -b develop URL | Klont und wechselt direkt in den Branch develop |
Der Grundzyklus: status, add, commit
Das ist der Kern der täglichen Arbeit: nachsehen, was sich geändert hat, das Gewünschte in den Index übernehmen und mit einem Commit festschreiben.
| Befehl | Was er macht |
|---|---|
git status | Zustand: geänderte, gestagte und nicht verfolgte Dateien |
git status -s | Kurzformat: M – geändert, A – hinzugefügt, ?? – nicht verfolgt |
git add file.txt | Datei zum Index hinzufügen |
git add . | Alle Änderungen im aktuellen Verzeichnis und darunter hinzufügen, inklusive Löschungen |
git add -A | Alle Änderungen im gesamten Repository hinzufügen |
git add -p | Einzelne Abschnitte (Hunks) der Änderungen interaktiv auswählen |
git commit -m "Login-Formular hinzufügen" | Commit aus dem Index mit Message erstellen |
git commit -am "Tippfehler korrigieren" | Alle geänderten verfolgten Dateien stagen und committen; neue Dateien kommen nicht mit |
git commit --amend | Letzten Commit neu schreiben: Vergessenes aus dem Index ergänzen oder Message korrigieren |
git commit --amend --no-edit | Letzten Commit ergänzen, ohne die Message zu ändern |
git rm file.txt | Datei von der Festplatte und aus dem Index löschen |
git rm --cached secret.env | Datei nicht mehr verfolgen, aber auf der Festplatte behalten |
git mv old.js new.js | Datei umbenennen oder verschieben |
Ein typischer Ablauf sieht so aus:
git status
git add src/login.js src/login.css
git diff --staged # prüfen, was genau in den Commit geht
git commit -m "Login-Formular hinzufügen"
Verwenden Sie --amend nicht für Commits, die bereits in einen gemeinsamen Branch gepusht wurden: Es entsteht ein neuer Commit mit anderem Hash, und Ihre Kollegen müssen sich mit der auseinanderlaufenden Historie herumschlagen.
Historie und Änderungen ansehen
| Befehl | Was er macht |
|---|---|
git log | Commit-Historie des aktuellen Branches |
git log --oneline | Jeder Commit in einer Zeile: kurzer Hash und Überschrift |
git log --oneline --graph --all | Graph aller Branches im Terminal |
git log -p file.txt | Historie einer Datei mit den Diffs jedes Commits |
git log --author="Max" --since="2 weeks ago" | Filter nach Autor und Datum |
git log -S "getUser" | Commits, in denen die Zeichenkette getUser hinzugefügt oder entfernt wurde |
git log main..feature | Commits, die in feature, aber nicht in main sind |
git diff | Änderungen im Arbeitsverzeichnis, die noch nicht im Index sind |
git diff --staged | Änderungen im Index gegenüber dem letzten Commit (Synonym: --cached) |
git diff main feature | Unterschied zwischen den Spitzen zweier Branches |
git diff HEAD~3 -- src/ | Änderungen im Ordner src in den letzten drei Commits |
git show a1b2c3d | Metadaten und Diff eines bestimmten Commits |
git show HEAD:README.md | Inhalt einer Datei im letzten Commit |
git blame app.js | Wer jede Zeile zuletzt geändert hat und in welchem Commit |
git shortlog -sn | Anzahl der Commits pro Autor |
Commit-Referenzen brauchen Sie überall: HEAD ist der aktuelle Commit, HEAD~1 sein Parent, HEAD~3 drei Schritte zurück entlang des ersten Parents, HEAD^2 der zweite Parent eines Merge-Commits.
Branches: anlegen, wechseln, löschen
Seit Version 2.23 gibt es in Git git switch für Branches und git restore für Dateien – sie haben das überladene git checkout aufgeteilt. Die alten Formen funktionieren weiterhin.
| Befehl | Was er macht |
|---|---|
git branch | Liste der lokalen Branches, der aktuelle ist mit * markiert |
git branch -a | Lokale und Remote-Tracking-Branches |
git branch -vv | Branches mit letztem Commit und Stand (ahead/behind) gegenüber dem Upstream |
git branch feature/login | Branch anlegen, ohne zu wechseln |
git switch feature/login | In einen Branch wechseln |
git switch -c feature/login | Branch anlegen und wechseln (entspricht git checkout -b) |
git switch - | Zum vorherigen Branch zurückkehren |
git branch -m new-name | Aktuellen Branch umbenennen |
git branch -d feature/login | Branch löschen, wenn er bereits gemergt ist |
git branch -D feature/login | Branch erzwungen löschen, auch ungemergt |
git branch --merged | Branches, die bereits in den aktuellen gemergt sind – Kandidaten zum Löschen |
Merge und Rebase
| Befehl | Was er macht |
|---|---|
git merge feature | feature in den aktuellen Branch mergen (wenn möglich per Fast-Forward) |
git merge --no-ff feature | Immer einen Merge-Commit erzeugen |
git merge --squash feature | Alle Änderungen des Branches als einen Satz in den Index holen, danach git commit |
git merge --abort | Merge mit Konflikten abbrechen und zum Ausgangszustand zurückkehren |
git rebase main | Commits des aktuellen Branches auf main setzen |
git rebase -i HEAD~4 | Interaktiv: die letzten 4 Commits zusammenfassen (squash), umbenennen, umsortieren, löschen |
git rebase --continue | Nach dem Lösen eines Konflikts fortfahren |
git rebase --abort | Rebase vollständig abbrechen |
git cherry-pick a1b2c3d | Einen einzelnen Commit als neuen auf den aktuellen Branch anwenden |
Das Lösen eines Merge-Konflikts sieht fast immer gleich aus:
git merge feature
# CONFLICT (content): Merge conflict in app.js
git status # Dateien im Abschnitt "both modified"
# app.js bearbeiten, Marker <<<<<<< ======= >>>>>>> entfernen
git add app.js
git commit # Git schlägt eine fertige Merge-Commit-Message vor
Die wichtigste Regel beim Rebase: Rebasen Sie keine Commits, die bereits in einem gemeinsamen Branch liegen und auf denen andere ihre Arbeit aufbauen.
Arbeit mit Remote-Repositories
| Befehl | Was er macht |
|---|---|
git remote -v | Liste der Remotes und ihrer Adressen |
git remote add origin git@github.com:user/repo.git | Remote-Repository unter dem Namen origin hinzufügen |
git remote set-url origin NEW_URL | Adresse eines Remotes ändern (z. B. von HTTPS auf SSH) |
git remote remove upstream | Remote entfernen |
git fetch | Neue Commits und Branches herunterladen, ohne Ihre Dateien anzufassen |
git fetch --prune | Dasselbe, plus Referenzen auf Branches entfernen, die auf dem Server gelöscht wurden |
git pull | git fetch + Merge des Upstream-Branches in den aktuellen |
git pull --rebase | git fetch + Rebase Ihrer Commits auf die geholten |
git push | Commits des aktuellen Branches in seinen Upstream pushen |
git push -u origin feature/login | Ersten Push eines Branches mit Setzen des Upstreams |
git push --force-with-lease | Remote-Branch nur überschreiben, wenn dort keine neuen fremden Commits liegen |
git push origin --delete feature/login | Branch auf dem Server löschen |
git push --tags | Alle lokalen Tags pushen |
Gewöhnen Sie sich statt git push --force lieber --force-with-lease an: Hat ein Kollege inzwischen in denselben Branch gepusht, weigert sich der Befehl, dessen Arbeit zu überschreiben.
Änderungen rückgängig machen
Der nervenaufreibendste Teil von Git. Die entscheidende Frage vor der Wahl des Befehls: Liegen die Änderungen nur in den Dateien, schon im Index, in einem lokalen Commit oder in einem veröffentlichten Commit?
| Situation | Befehl |
|---|---|
| Änderungen an einer Datei verwerfen (Stand des letzten Commits wiederherstellen) | git restore app.js |
| Datei aus dem Index nehmen, Änderungen behalten | git restore --staged app.js |
| Datei aus einem bestimmten Commit wiederherstellen | git restore --source=a1b2c3d app.js |
| Letzten Commit rückgängig machen, Änderungen im Index behalten | git reset --soft HEAD~1 |
| Letzten Commit rückgängig machen, Änderungen in den Dateien behalten | git reset HEAD~1 (Standardmodus --mixed) |
| Letzten Commit samt allen Änderungen löschen | git reset --hard HEAD~1 |
| Veröffentlichten Commit durch einen neuen „Gegen-Commit“ rückgängig machen | git revert a1b2c3d |
| Merge-Commit rückgängig machen | git revert -m 1 <merge-hash> |
| Anzeigen, welche nicht verfolgten Dateien gelöscht würden | git clean -n |
| Nicht verfolgte Dateien und Ordner löschen | git clean -fd |
| „Verlorenen“ Commit nach reset oder rebase finden | git reflog, danach git reset --hard HEAD@{2} |
git reset --hard und git clean -f löschen nicht committete Änderungen unwiderruflich: Das Reflog speichert nur Commits, keine Änderungen im Arbeitsverzeichnis. Führen Sie vorher git stash oder zumindest git status aus.
Stash: unfertige Arbeit zurückstellen
| Befehl | Was er macht |
|---|---|
git stash | Änderungen an verfolgten Dateien beiseitelegen und das Arbeitsverzeichnis bereinigen |
git stash push -u -m "wip: formular" | Zusammen mit nicht verfolgten Dateien und mit Beschriftung beiseitelegen |
git stash list | Liste der zurückgestellten Sätze: stash@{0}, stash@{1}… |
git stash show -p stash@{0} | Diff eines zurückgestellten Satzes ansehen |
git stash pop | Letzten Satz zurückholen und aus der Liste entfernen |
git stash apply stash@{1} | Satz zurückholen, aber in der Liste lassen |
git stash drop stash@{1} | Einen Satz löschen |
git stash branch fix-form | Branch vom Commit anlegen, auf dem der Stash erstellt wurde, und ihn anwenden |
Tags und Releases
| Befehl | Was er macht |
|---|---|
git tag | Liste der Tags |
git tag -a v1.2.0 -m "Release 1.2.0" | Annotierter Tag mit Autor, Datum und Message |
git tag v1.2.0 a1b2c3d | Leichtgewichtiger Tag auf einen bestimmten Commit |
git push origin v1.2.0 | Einen einzelnen Tag pushen |
git tag -d v1.2.0 | Tag lokal löschen |
git push origin --delete v1.2.0 | Tag auf dem Server löschen |
git describe --tags | Nächstgelegener Tag und Anzahl der Commits danach, z. B. v1.2.0-3-ga1b2c3d |
Fortgeschrittene Git-Befehle
| Befehl | Was er macht |
|---|---|
git bisect start, git bisect bad, git bisect good v1.1.0 | Binäre Suche nach dem Commit, der den Fehler eingeführt hat; am Ende git bisect reset |
git worktree add ../hotfix main | Zweiter Arbeitsordner mit einem anderen Branch aus demselben Repository |
git submodule update --init --recursive | Submodule nach dem Klonen herunterladen |
git grep "TODO" | Schnelle Suche in verfolgten Dateien |
git format-patch -1 HEAD / git apply fix.patch | Commit als Patch speichern und einen Patch auf das Arbeitsverzeichnis anwenden |
git gc | Objekte packen und das Repository aufräumen (macht Git normalerweise selbst) |
Häufige Fehler und wie Sie sie beheben
In main statt in einen neuen Branch committet
Wenn der Commit noch nicht gepusht ist, legen Sie auf dem aktuellen Commit einen Branch an und setzen main zurück:
git branch feature/login # Branch zeigt auf Ihren Commit
git reset --hard HEAD~1 # main geht einen Schritt zurück
git switch feature/login
Datei im letzten Commit vergessen
git add forgotten.js
git commit --amend --no-edit
Push abgelehnt: rejected, non-fast-forward
Auf dem Server liegen Commits, die Sie nicht haben. Holen Sie sie zuerst und pushen Sie dann:
git pull --rebase
git push
Versehentlich eine Datei mit Passwörtern committet
Nehmen Sie sie aus der Versionierung und tragen Sie sie in .gitignore ein: git rm --cached .env, danach committen. Ist der Commit bereits veröffentlicht, betrachten Sie das Secret als kompromittiert und erneuern Sie es – aus der Historie ist es nicht verschwunden.
Fazit
Für die tägliche Arbeit genügt ein kleiner Satz: status, add, commit, switch, merge, pull, push und log --oneline. Die Befehle zum Rückgängigmachen – restore, reset, revert – wählen Sie danach aus, ob der Commit bereits veröffentlicht ist, und reflog behalten Sie als Sicherheitsnetz für den Notfall im Hinterkopf. Alle Git-Befehle aus diesem Cheat Sheet werden im Git-Kurs praktisch durchgearbeitet – jeden davon probieren Sie in Ihrem eigenen Repository aus.
Häufige Fragen
Wie viele Git-Befehle muss ein Einsteiger kennen?
Für den Start reichen 10–12: init, clone, status, add, commit, log, diff, branch, switch, merge, pull und push. Die übrigen lernen Sie, sobald die passenden Aufgaben auftauchen.
Was ist der Unterschied zwischen git switch und git checkout?
git switch kann nur Branches wechseln und anlegen, git checkout stellt zusätzlich Dateien wieder her. Die Aufteilung in switch und restore soll verhindern, dass Sie versehentlich Änderungen überschreiben, weil Sie einen Branch mit einer Datei verwechseln.
Wie rufe ich die Hilfe zu einem Git-Befehl auf?
Mit git help befehlsname erhalten Sie das vollständige Handbuch, mit git befehlsname -h eine kurze Liste der Flags. Dieselbe Dokumentation finden Sie auf git-scm.com.
Kann man lange Git-Befehle abkürzen?
Ja, mit Aliasen: Nach git config --global alias.lg "log --oneline --graph --all" genügt es, git lg einzugeben.
Funktionieren diese Befehle unter Windows?
Ja, die Befehle sind auf allen Systemen gleich. Unter Windows führen Sie sie bequem in Git Bash, PowerShell oder im Terminal Ihres Code-Editors aus.
Dieses Thema wird im Kurs „Git vom Anfänger zum versierten Entwickler“ ausführlich mit Praxis behandelt.
- Erstes Repository: init, add, commit und die Magie des Index
- Versionsgeschichte verstehen: Log, Diff, Show und Navigation durch die Vergangenheit
- Branches: Die parallele Realität Ihres Codes
- Fehler rückgängig machen: restore, reset, revert – richtig und gefährlich
- GitHub und Remote-Repositories: Ihr Code in der Cloud
- Fortgeschrittene Tools: Rebase, Stash, Cherry-Pick und Tags