Spickzettel

Git-Befehle: Cheat Sheet mit Beispielen für jeden Tag

Aktualisiert: · Skillaria.Top

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.

BefehlWas 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 mainName 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 falseStandardverhalten von git pull – Merge
git config --global core.autocrlf inputCRLF beim Commit in LF umwandeln (macOS/Linux; unter Windows meist true)
git config --list --show-originAlle Einstellungen samt Datei anzeigen, aus der sie stammen
git config --global alias.st statusAlias: git st statt git status
git --versionVersion des installierten Git
git help commitVollständige Hilfe zum Befehl (oder git commit -h für die Kurzfassung)

Repository anlegen und klonen

BefehlWas er macht
git initLegt ein leeres Repository (Ordner .git) im aktuellen Verzeichnis an
git init my-projectLegt das Verzeichnis my-project und darin ein Repository an
git clone https://github.com/user/repo.gitKopiert ein Remote-Repository mit der gesamten Historie
git clone git@github.com:user/repo.git appKlont per SSH in den Ordner app
git clone --depth 1 URLShallow Clone: nur der letzte Commit, schnell und platzsparend
git clone -b develop URLKlont 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.

BefehlWas er macht
git statusZustand: geänderte, gestagte und nicht verfolgte Dateien
git status -sKurzformat: M – geändert, A – hinzugefügt, ?? – nicht verfolgt
git add file.txtDatei zum Index hinzufügen
git add .Alle Änderungen im aktuellen Verzeichnis und darunter hinzufügen, inklusive Löschungen
git add -AAlle Änderungen im gesamten Repository hinzufügen
git add -pEinzelne 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 --amendLetzten Commit neu schreiben: Vergessenes aus dem Index ergänzen oder Message korrigieren
git commit --amend --no-editLetzten Commit ergänzen, ohne die Message zu ändern
git rm file.txtDatei von der Festplatte und aus dem Index löschen
git rm --cached secret.envDatei nicht mehr verfolgen, aber auf der Festplatte behalten
git mv old.js new.jsDatei 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

BefehlWas er macht
git logCommit-Historie des aktuellen Branches
git log --onelineJeder Commit in einer Zeile: kurzer Hash und Überschrift
git log --oneline --graph --allGraph aller Branches im Terminal
git log -p file.txtHistorie 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..featureCommits, 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 featureUnterschied zwischen den Spitzen zweier Branches
git diff HEAD~3 -- src/Änderungen im Ordner src in den letzten drei Commits
git show a1b2c3dMetadaten und Diff eines bestimmten Commits
git show HEAD:README.mdInhalt einer Datei im letzten Commit
git blame app.jsWer jede Zeile zuletzt geändert hat und in welchem Commit
git shortlog -snAnzahl 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.

BefehlWas er macht
git branchListe der lokalen Branches, der aktuelle ist mit * markiert
git branch -aLokale und Remote-Tracking-Branches
git branch -vvBranches mit letztem Commit und Stand (ahead/behind) gegenüber dem Upstream
git branch feature/loginBranch anlegen, ohne zu wechseln
git switch feature/loginIn einen Branch wechseln
git switch -c feature/loginBranch anlegen und wechseln (entspricht git checkout -b)
git switch -Zum vorherigen Branch zurückkehren
git branch -m new-nameAktuellen Branch umbenennen
git branch -d feature/loginBranch löschen, wenn er bereits gemergt ist
git branch -D feature/loginBranch erzwungen löschen, auch ungemergt
git branch --mergedBranches, die bereits in den aktuellen gemergt sind – Kandidaten zum Löschen

Merge und Rebase

BefehlWas er macht
git merge featurefeature in den aktuellen Branch mergen (wenn möglich per Fast-Forward)
git merge --no-ff featureImmer einen Merge-Commit erzeugen
git merge --squash featureAlle Änderungen des Branches als einen Satz in den Index holen, danach git commit
git merge --abortMerge mit Konflikten abbrechen und zum Ausgangszustand zurückkehren
git rebase mainCommits des aktuellen Branches auf main setzen
git rebase -i HEAD~4Interaktiv: die letzten 4 Commits zusammenfassen (squash), umbenennen, umsortieren, löschen
git rebase --continueNach dem Lösen eines Konflikts fortfahren
git rebase --abortRebase vollständig abbrechen
git cherry-pick a1b2c3dEinen 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

BefehlWas er macht
git remote -vListe der Remotes und ihrer Adressen
git remote add origin git@github.com:user/repo.gitRemote-Repository unter dem Namen origin hinzufügen
git remote set-url origin NEW_URLAdresse eines Remotes ändern (z. B. von HTTPS auf SSH)
git remote remove upstreamRemote entfernen
git fetchNeue Commits und Branches herunterladen, ohne Ihre Dateien anzufassen
git fetch --pruneDasselbe, plus Referenzen auf Branches entfernen, die auf dem Server gelöscht wurden
git pullgit fetch + Merge des Upstream-Branches in den aktuellen
git pull --rebasegit fetch + Rebase Ihrer Commits auf die geholten
git pushCommits des aktuellen Branches in seinen Upstream pushen
git push -u origin feature/loginErsten Push eines Branches mit Setzen des Upstreams
git push --force-with-leaseRemote-Branch nur überschreiben, wenn dort keine neuen fremden Commits liegen
git push origin --delete feature/loginBranch auf dem Server löschen
git push --tagsAlle 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?

SituationBefehl
Änderungen an einer Datei verwerfen (Stand des letzten Commits wiederherstellen)git restore app.js
Datei aus dem Index nehmen, Änderungen behaltengit restore --staged app.js
Datei aus einem bestimmten Commit wiederherstellengit restore --source=a1b2c3d app.js
Letzten Commit rückgängig machen, Änderungen im Index behaltengit reset --soft HEAD~1
Letzten Commit rückgängig machen, Änderungen in den Dateien behaltengit reset HEAD~1 (Standardmodus --mixed)
Letzten Commit samt allen Änderungen löschengit reset --hard HEAD~1
Veröffentlichten Commit durch einen neuen „Gegen-Commit“ rückgängig machengit revert a1b2c3d
Merge-Commit rückgängig machengit revert -m 1 <merge-hash>
Anzeigen, welche nicht verfolgten Dateien gelöscht würdengit clean -n
Nicht verfolgte Dateien und Ordner löschengit clean -fd
„Verlorenen“ Commit nach reset oder rebase findengit 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

BefehlWas 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 listListe der zurückgestellten Sätze: stash@{0}, stash@{1}…
git stash show -p stash@{0}Diff eines zurückgestellten Satzes ansehen
git stash popLetzten 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-formBranch vom Commit anlegen, auf dem der Stash erstellt wurde, und ihn anwenden

Tags und Releases

BefehlWas er macht
git tagListe 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 a1b2c3dLeichtgewichtiger Tag auf einen bestimmten Commit
git push origin v1.2.0Einen einzelnen Tag pushen
git tag -d v1.2.0Tag lokal löschen
git push origin --delete v1.2.0Tag auf dem Server löschen
git describe --tagsNächstgelegener Tag und Anzahl der Commits danach, z. B. v1.2.0-3-ga1b2c3d

Fortgeschrittene Git-Befehle

BefehlWas er macht
git bisect start, git bisect bad, git bisect good v1.1.0Binäre Suche nach dem Commit, der den Fehler eingeführt hat; am Ende git bisect reset
git worktree add ../hotfix mainZweiter Arbeitsordner mit einem anderen Branch aus demselben Repository
git submodule update --init --recursiveSubmodule nach dem Klonen herunterladen
git grep "TODO"Schnelle Suche in verfolgten Dateien
git format-patch -1 HEAD / git apply fix.patchCommit als Patch speichern und einen Patch auf das Arbeitsverzeichnis anwenden
git gcObjekte 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.