Git-Kommandos helfen dir, Änderungen an Dateien nachzuvollziehen, Arbeit in Branches zu trennen und Ergebnisse mit anderen zu teilen. Die bisherige Liste auf dieser Seite endete bei Nummer 58 mitten im Satz. Hier findest du 60 vollständige, nach Aufgaben geordnete Befehlsbeispiele – vom ersten Commit bis zur Fehlersuche.
Du musst nicht alle 60 Git-Kommandos auswendig lernen. Für den Alltag reichen zunächst git status, git add, git commit, git log, git fetch und git push. Die übrigen Befehle sind ein Nachschlagewerk. Beispiele mit main setzen voraus, dass dein Hauptbranch so heißt; in deinem Repository kann er anders heißen.
Vor dem ersten Commit: Arbeitsverzeichnis, Staging Area und Repository
Git unterscheidet drei Zustände: Im Arbeitsverzeichnis bearbeitest du Dateien. Mit git add wählst du Änderungen für den nächsten Commit in der Staging Area aus. git commit speichert diesen Stand im lokalen Repository. Erst git push überträgt Commits an ein entferntes Repository. git status zeigt dir jederzeit, wo eine Änderung gerade liegt.
Git-Kommandos für Einrichtung und tägliche Arbeit (1–15)
git --versionzeigt die installierte Git-Version. So prüfst du, ob Git im Terminal erreichbar ist.git config --global user.name "Dein Name"legt deinen Namen für künftige Commits fest. Der Wert ist Commit-Metadatum, keine Anmeldung beim Hostingdienst.git config --global user.email "du@example.com"setzt die E-Mail-Adresse für künftige Commits. Verwende die Adresse, die du für das Projekt vorgesehen hast.git config --list --show-originzeigt aktive Einstellungen und die Datei, aus der sie stammen. Das hilft bei widersprüchlichen lokalen und globalen Werten.git init -b mainerstellt im aktuellen Ordner ein neues Repository mit dem Startbranchmain. Für ein bereits vorhandenes Remote-Repository nutzt du stattdessengit clone.git clone https://example.com/team/projekt.gitkopiert ein bestehendes Repository samt Historie in einen neuen lokalen Ordner. Ersetze die Beispieladresse durch die echte Repository-URL.git statuszeigt den aktuellen Branch sowie geänderte, vorgemerkte und nicht verfolgte Dateien. Vor einem Commit ist dies der wichtigste Kontrollblick.git add README.mdnimmt den aktuellen Stand dieser Datei in die Staging Area auf. Spätere Änderungen an derselben Datei musst du bei Bedarf erneut hinzufügen.git add -plässt dich einzelne Änderungsblöcke für den nächsten Commit auswählen. Das ist nützlich, wenn eine Datei mehrere unabhängige Änderungen enthält.git diffzeigt Änderungen im Arbeitsverzeichnis, die noch nicht gestaged sind. Neue, noch nicht verfolgte Dateien erscheinen darin nicht.git diff --cachedzeigt die Änderungen, die bereits für den nächsten Commit vorgemerkt sind.--stagedist ein gleichwertiger Optionsname.git commit -m "Dokumentation ergänzen"speichert die gestagten Änderungen als lokalen Commit. Eine Nachricht sollte knapp beschreiben, was sich geändert hat.git commit --amendersetzt den letzten Commit, etwa um seine Nachricht oder frisch gestagte Änderungen zu korrigieren. Dadurch ändert sich seine Commit-ID; bei bereits veröffentlichten Commits ist Vorsicht nötig.git log --oneline --graph --decorate --allzeigt die Historie kompakt samt Branch- und Tag-Verweisen.git showzeigt den letzten Commit und dessen Änderungen. Mit einer Commit-ID als Argument kannst du einen bestimmten Commit untersuchen.
Branches und Änderungen zusammenführen (16–27)
git branchlistet lokale Branches auf. Ein Stern markiert den aktuell ausgecheckten Branch.git switch -c feature/loginerstellt den Branchfeature/loginund wechselt dorthin. Er wird vom aktuellen Commit abgezweigt.git switch mainwechselt zu einem bestehenden Branch. Wenn lokale Änderungen dabei überschrieben würden, verweigert Git den Wechsel normalerweise.git branch -d feature/loginlöscht einen lokalen Branch nach abgeschlossener Arbeit. Git verweigert das Löschen normalerweise, wenn seine Änderungen noch nicht passend integriert wurden.git merge feature/loginintegriert diesen Branch in den aktuell ausgecheckten Branch. Prüfe vor dem Befehl mitgit status, wo du stehst.git merge --abortbricht einen laufenden Merge nach Konflikten ab und versucht, den Zustand vor dem Merge wiederherzustellen.git rebase mainsetzt die Commits des aktuellen Branches auf die Spitze vonmain. Dabei entstehen neue Commit-IDs. Rebase veröffentlichter, gemeinsam genutzter Branches nur nach Absprache.git rebase --abortbricht einen noch laufenden Rebase ab, beispielsweise wenn die Konfliktlösung nicht wie erwartet gelingt.git cherry-pick <commit-id>übernimmt die Änderung eines bestimmten Commits in den aktuellen Branch und erzeugt dort einen neuen Commit.git cherry-pick --abortbricht einen laufenden Cherry-Pick mit Konflikten ab.git tag -a v1.0.0 -m "Version 1.0.0"markiert den aktuellen Commit mit einem kommentierten Tag. Tags eignen sich beispielsweise für Releases.git tag --listlistet lokale Tags auf. Ein lokaler Tag wird erst mit einem passenden Push-Befehl auf den Remote übertragen.
Git-Kommandos für Remotes und Zusammenarbeit (28–36)
git remote -vzeigt die Namen und URLs der konfigurierten Remotes.originist ein üblicher Name, aber keine Pflicht.git remote add origin https://example.com/team/projekt.gitfügt einem lokalen Repository einen Remote hinzu. Bei einem geklonten Repository istoriginmeist schon vorhanden.git fetch originlädt neue Remote-Commits und Referenzen, ohne sie automatisch in deinen aktuellen Branch zu integrieren.git pull --ff-onlyholt Änderungen für den konfigurierten Upstream-Branch und integriert sie nur, wenn ein Fast-Forward möglich ist. Andernfalls stoppt der Befehl, damit du die Abweichung bewusst klärst.git push -u origin mainveröffentlicht den lokalen Branchmainauforiginund richtet ihn als Upstream ein. Verwende den tatsächlichen Branch-Namen deines Projekts.git push origin feature/loginveröffentlicht den genannten lokalen Branch. Ein normaler Push überschreibt keine abweichende Remote-Historie.git ls-remote originzeigt Referenzen und Commit-IDs auf dem Remote, ohne dessen Änderungen in deine lokalen Branches zu übernehmen.git diff main...feature/loginzeigt die Änderungen auffeature/loginseit dem gemeinsamen Ausgangspunkt mitmain. Die drei Punkte sind hier wichtig.git log main..feature/login --onelinelistet Commits, die vonfeature/loginaus erreichbar sind, vonmainaber noch nicht.
Zwischenstände sichern und Fehler rückgängig machen (37–49)
Hier lohnt ein zweiter Blick auf git status. restore, reset und revert lösen unterschiedliche Probleme: restore behandelt Dateien, reset kann Branch-Zeiger oder Staging Area ändern, und revert macht einen Commit durch einen neuen Commit rückgängig. Die Git-Dokumentation erklärt diese Unterscheidung.
git stash push -m "Zwischenstand"legt verfolgte lokale Änderungen vorübergehend ab. Neue, nicht verfolgte Dateien werden standardmäßig nicht mitgenommen; dafür gibt es-u.git stash listzeigt gespeicherte Stashes an. So siehst du, welche Zwischenstände noch vorhanden sind.git stash popwendet den neuesten Stash an und entfernt ihn bei erfolgreicher Anwendung aus der Liste. Konflikte musst du gegebenenfalls lösen.git stash applywendet den neuesten Stash an, behält den Stash-Eintrag aber für eine spätere Wiederverwendung.git restore -- README.mdverwirft nicht gestagte Änderungen an dieser verfolgten Datei. Achtung: Die verworfenen Änderungen können verloren sein.git restore --staged -- README.mdnimmt die Datei aus der Staging Area, ohne ihre Änderungen im Arbeitsverzeichnis zu verwerfen.git revert <commit-id>erzeugt einen neuen Commit, der die Wirkung des genannten Commits umkehrt. Für bereits veröffentlichte Änderungen ist das oft nachvollziehbarer als ein Reset.git reset --soft HEAD~1nimmt den letzten lokalen Commit aus der Branch-Historie zurück; seine Änderungen bleiben gestaged. Vermeide das auf gemeinsam genutzten, veröffentlichten Branches.git reset --mixed HEAD~1nimmt den letzten lokalen Commit zurück und entfernt seine Änderungen aus der Staging Area. Die Änderungen bleiben im Arbeitsverzeichnis.git clean -ndzeigt unverfolgte Dateien und Verzeichnisse an, die ein anschließendesgit clean -fdentfernen würde. Beginne immer mit dieser Vorschau.git clean -fdentfernt unverfolgte Dateien und Verzeichnisse. Achtung: Das kann nicht eingecheckte Arbeit dauerhaft löschen; prüfe die Vorschau und den aktuellen Pfad zuerst.git reflogzeigt lokale Bewegungen vonHEADund Referenzen. Damit findest du mitunter einen Commit wieder, der im normalen Log nicht mehr sichtbar ist. Reflog-Einträge sind nicht dauerhaft garantiert.git restore --source=<commit-id> -- README.mdholt den Stand einer Datei aus einem bestimmten Commit ins Arbeitsverzeichnis. Das ändert den aktuellen Branch-Zeiger nicht; vorhandene ungestagte Änderungen an der Datei können überschrieben werden.
Dateien untersuchen und größere Projekte verwalten (50–60)
git rm alte-datei.txtentfernt eine verfolgte Datei aus dem Arbeitsverzeichnis und merkt ihre Löschung für den nächsten Commit vor.git mv alt.txt neu.txtbenennt eine verfolgte Datei um und staged die Änderung. Git erkennt Umbenennungen anhand des Inhalts; es speichert sie nicht als eigenes dauerhaftes Objekt.git grep -n "TODO"sucht in verfolgten Dateien nach dem TextTODOund zeigt Zeilennummern an.git blame -L 1,20 -- README.mdzeigt für die ersten 20 Zeilen, welcher Commit sie zuletzt geändert hat. Das ist ein Ausgangspunkt für Nachfragen, kein Beweis für die Ursache eines Fehlers.git bisect startbeginnt eine binäre Suche nach dem Commit, der einen reproduzierbaren Fehler eingeführt hat.git bisect bad HEADmarkiert den aktuellen Commit im laufenden Bisect als fehlerhaft.git bisect good <commit-id>markiert einen älteren, nachweislich funktionierenden Commit. Git wählt danach Teststände zwischen „gut“ und „schlecht“ aus; bewerte jeden mitgit bisect goododergit bisect bad.git bisect resetbeendet die Suche und kehrt zum vorherigen Branch zurück.git worktree add -b fix/bug ../fix-bugerstellt einen zweiten Arbeitsordner samt neuem Branch. So kannst du parallel arbeiten, ohne den aktuellen Ordner umzuschalten.git submodule update --init --recursiveinitialisiert und aktualisiert die im Projekt eingetragenen Submodule einschließlich verschachtelter Submodule.git fsck --fullprüft die Git-Objektdatenbank auf Konsistenz. Der Befehl ist eher für Fehlersuche als für die tägliche Arbeit gedacht.
Ein sinnvoller Ablauf für den ersten eigenen Branch
Nach der Einrichtung kannst du einen typischen Arbeitsablauf mit wenigen Befehlen abdecken:
git switch -c feature/login
git status
git diff
git add -p
git diff --cached
git commit -m "Login-Formular ergänzen"
git fetch origin
git push -u origin feature/login
git add -p lässt dich gezielt Änderungen auswählen. Sind alle Änderungen für denselben Commit gedacht, kannst du stattdessen passende Dateien einzeln mit git add datei vormerken. Prüfe vor jedem Push noch einmal git status und die Commit-Historie.
Häufige Fragen zu Git-Kommandos
Was ist der Unterschied zwischen git fetch und git pull?
git fetch aktualisiert deine Sicht auf das Remote-Repository, ohne den aktuellen Branch zu integrieren. git pull holt Änderungen und versucht anschließend, sie in den aktuellen Branch zu integrieren. Wenn du erst prüfen möchtest, was sich geändert hat, beginne mit git fetch.
Wann sollte ich git push –force verwenden?
Im normalen Team-Workflow möglichst nicht. Ein erzwungener Push kann Remote-Commits überschreiben. Falls ein ausdrücklich abgestimmter History-Rewrite nötig ist, lies die Dokumentation zu --force-with-lease und prüfe den konkreten Branch. Auch diese Option ersetzt keine Abstimmung im Team.
Kann Git gelöschte Dateien immer wiederherstellen?
Nein. Git kann versionierte Dateistände aus Commits wiederherstellen. Unverfolgte Dateien, die beispielsweise mit git clean -fd gelöscht wurden, liegen nicht automatisch in der Git-Historie. Ein Backup bleibt wichtig.
Fazit
Die 60 Git-Kommandos sind nach Arbeitsschritten geordnet, damit du den passenden Befehl schneller findest. Starte mit Status, Diff, Add und Commit; ergänze danach Branches und Remotes. Für jede Rücknahme gilt: Prüfe zuerst, ob die Änderung nur lokal vorliegt oder bereits veröffentlicht wurde. Die vollständige Syntax und weitere Beispiele stehen in der offiziellen Git-Referenz.