W3docs

git checkout

Nützliche Informationen zum git checkout-Befehl, seiner Verwendung und dem Zusammenhang zwischen git checkout und git branch. Mit Beispielen.

Was git checkout macht

git checkout ist einer der vielseitigsten Befehle in Git. Er erfüllt zwei unterschiedliche Aufgaben:

  1. Branches wechselnHEAD auf einen anderen Branch zeigen lassen und die Dateien im Arbeitsverzeichnis aktualisieren, damit sie dem letzten Commit dieses Branches entsprechen.
  2. Dateien wiederherstellen — Dateien im Arbeitsverzeichnis (oder im Staging-Bereich) mit einer Version aus einem Commit, einem Branch oder dem Index überschreiben.

HEAD ist der Git-Zeiger auf „den aktuellen Stand" — normalerweise die Spitze des ausgecheckten Branches. Wenn git checkout ausgeführt wird, bewegt Git HEAD und schreibt die verfolgten Dateien so um, dass der Arbeitsbaum dem Ziel entspricht.

Da der Befehl mehrere Funktionen vereint, hat modernes Git (2.23+) seine zwei Rollen in zwei klarere Befehle aufgeteilt: git switch zum Wechseln zwischen Branches und git restore zum Verwerfen von Dateiänderungen. git checkout funktioniert nach wie vor genauso wie zuvor und wird auf dieser Seite durchgehend verwendet, wobei die modernen Entsprechungen an geeigneter Stelle erwähnt werden.

Diese Seite behandelt das Auschecken vorhandener und neuer Branches, die Arbeit mit Remote-Branches, das Wiederherstellen von Dateien und den „detached HEAD"-Zustand.

Einen vorhandenen Branch auschecken

Wenn ein Repository bereits mehrere Branches enthält, wechselt git checkout <branch> zu einem davon. Führe zuerst git branch aus, um die verfügbaren Branches aufzulisten; der aktuelle Branch ist mit einem Sternchen markiert:

Branches auflisten und zu einem wechseln

$ git branch
* master
  test_branch
  feature_branch

$ git checkout feature_branch
Switched to branch 'feature_branch'

Nach dem Wechsel entspricht das Arbeitsverzeichnis dem letzten Commit auf feature_branch, und alle neuen Commits werden dort erfasst. Die moderne Entsprechung ist git switch feature_branch.

Git verweigert den Wechsel, wenn nicht committete Änderungen vorhanden sind, die vom Zielbranch überschrieben würden. In diesem Fall sollten sie zuerst committet, gestasht oder verworfen werden.

Einen neuen Branch erstellen und auschecken

Um in einem Schritt einen Branch zu erstellen und zu ihm zu wechseln, verwende den -b-Flag:

git checkout -b

git checkout -b new_branch

Der -b-Flag weist Git an, git branch new_branch auszuführen (den Branch vom aktuellen HEAD aus zu erstellen) und anschließend sofort git checkout new_branch aufzurufen. Dies entspricht:

git branch new_branch
git checkout new_branch

Standardmäßig beginnt der neue Branch beim aktuellen HEAD. Um ihn stattdessen auf einem anderen Branch oder Commit zu basieren, gib einen Startpunkt an:

git checkout -b von einem bestimmten Startpunkt

git checkout -b new_branch existing_branch

Hier wird new_branch an der Spitze von existing_branch erstellt und nicht beim aktuellen HEAD. Die moderne Entsprechung ist git switch -c new_branch existing_branch.

Branches wechseln und HEAD

Das Ausführen von git checkout <branch> richtet HEAD auf die Spitze dieses Branches aus:

git checkout main

Wenn du versehentlich wechselst oder den Überblick verlierst, wo sich HEAD befunden hat, listet der Befehl git reflog jede Position auf, die HEAD innehatte, sodass du zu einem früheren Zustand zurückkehren kannst.

Einen Remote-Branch auschecken

Bei der Teamarbeit enthält das Remote-Repository Branches, die andere Personen gepusht haben. Um sie zu sehen und auszuchecken, lade zuerst die neuesten Remote-Daten mit git fetch herunter:

git fetch --all

Modernes Git kann dann einen Remote-Branch anhand seines Kurznamens auschecken. Git erstellt automatisch einen lokalen Branch, der den passenden Remote-Branch trackt:

git checkout feature_branch

Dies funktioniert nur, wenn genau ein Remote einen Branch mit diesem Namen hat. Wenn der Name mehrdeutig ist oder du explizit sein möchtest, erstelle einen lokalen Tracking-Branch aus dem Remote-Tracking-Ref:

Einen lokalen Branch aus einem Remote-Branch erstellen

git checkout -b feature_branch origin/feature_branch

Der -b-Flag ist hier erforderlich — der neue lokale Branch feature_branch wird bei origin/feature_branch erstellt und so eingestellt, dass er diesen trackt. Um einen vorhandenen lokalen Branch so zu erzwingen, dass er exakt der Remote-Spitze entspricht, verwende git reset:

git reset --hard origin/feature_branch

git reset --hard verwirft lokale Commits und nicht committete Änderungen auf diesem Branch, also verwende ihn nur, wenn du lokale Arbeit wirklich verwerfen möchtest.

Dateien mit git checkout wiederherstellen

Neben dem Wechseln von Branches kann git checkout Dateien im Arbeitsbaum durch eine Version aus dem Index oder einem anderen Commit ersetzen.

Nicht committete Änderungen in einer einzelnen Datei verwerfen und die Version aus dem letzten Commit wiederherstellen:

Änderungen in einer Datei verwerfen

git checkout -- file.txt

Das -- trennt die Optionen des Befehls vom Dateipfad, was Mehrdeutigkeiten vermeidet, wenn eine Datei und ein Branch denselben Namen haben. Die moderne Entsprechung ist git restore file.txt.

Eine Datei so wiederherstellen, wie sie in einem bestimmten Commit oder Branch existiert hat, ohne Branches zu wechseln:

Eine Datei aus einem anderen Commit wiederherstellen

git checkout <commit> -- file.txt

Dies aktualisiert file.txt im Arbeitsverzeichnis und Staging-Bereich mit dem Inhalt aus <commit>, während HEAD auf dem aktuellen Branch bleibt. Siehe git restore für die klarere moderne Syntax.

Detached-HEAD-Zustand

Das Auschecken eines bestimmten Commits (statt eines Branches) versetzt dich in einen Detached-HEAD-Zustand:

git checkout a1b2c3d

Normalerweise zeigt HEAD auf einen Branch, der wiederum auf einen Commit zeigt. Wenn du einen Commit direkt auscheckst, zeigt HEAD direkt auf diesen Commit ohne angehängten Branch — das bedeutet „detached". Dies ist nützlich, um einen alten Zustand des Projekts zu untersuchen oder zu testen.

git checkout

Das Risiko besteht darin, dass alle Commits in diesem Zustand auf keinem Branch liegen. Sobald du einen anderen Branch auscheckst, haben diese Commits keinen Verweis mehr, der auf sie zeigt, und werden schwer auffindbar (Git wird sie schließlich per Garbage Collection entfernen). Wenn du die im Detached-HEAD-Zustand erstellte Arbeit behalten möchtest, gib ihr einen Branch, bevor du den Zustand verlässt:

git switch -c new_branch

Also: einen alten Commit im Detached-HEAD-Zustand zu untersuchen ist völlig sicher, aber führe neue Entwicklungsarbeit auf einem echten Branch durch, damit deine Commits erreichbar bleiben. Das git reflog kann dir trotzdem helfen, Commits wiederzufinden, falls du es vergisst.

Übungen

Übung
Was sind die Funktionen und Merkmale des 'git checkout'-Befehls?
Was sind die Funktionen und Merkmale des 'git checkout'-Befehls?
Was this page helpful?