Close

git checkout

Auf dieser Seite nehmen wir den Befehl git checkout unter die Lupe. Wir werden Anwendungsbeispiele und Grenzfälle behandeln. Im Git-Jargon versteht man unter einem "Checkout" eine Art Wechseln zwischen verschiedenen Versionen einer Zieleinheit. Der Befehl git checkout agiert zwischen drei unterschiedlichen Einheiten: Dateien, Commits und Branches. Neben dieser Bedeutung von "Checkout" wird auch oft der Ausdruck "auschecken" verwendet, um vom Ausführen des Befehls git checkout zu sprechen. Beim Thema Änderungen rückgängig machen haben wir dir gezeigt, wie du mit git checkout alte Commits abrufen kannst. Unser Augenmerk hier wird auf Checkout-Vorgängen bei Branches liegen.

Der Git-Branch-Checkout funktioniert ähnlich wie der Checkout alter Commits und Dateien: Das Arbeitsverzeichnis wird mit den Änderungen aus dem ausgewählten Branch bzw. der ausgewählten Revision aktualisiert. Neue Änderungen werden jedoch im Projektverlauf gespeichert. Es handelt sich also nicht um eine schreibgeschützte Operation.


So funktioniert in Git der Branch-Checkout


Über den Befehl git checkout kannst du zwischen Branches wechseln, die du mit git branch erstellt hast. Wenn du in Git einen Branch-Checkout ausführst, werden die Dateien im Arbeitsverzeichnis mit den in dem betreffenden Branch gespeicherten Versionen aktualisiert und Git speichert alle neuen Commits in dem ausgecheckten Branch. Du wählst also im Grunde genommen aus, zu welchem Git-Branch du wechseln möchtest, um an dieser Entwicklungslinie weiterzuarbeiten.

Im Vergleich zu einem herkömmlichen SVN-Workflow ist es etwas ganz anderes, für jedes neue Feature in Git den Branch zu wechseln. Neue Experimente sind das reinste Kinderspiel und du musst dabei nicht befürchten, eine bestehende Funktionalität zu zerstören. Außerdem kannst du so an vielen nicht zusammengehörigen Features gleichzeitig arbeiten. Außerdem vereinfachen Branches viele Workflows zur Zusammenarbeit.

Der Befehl git checkout kann gelegentlich mit git clone verwechselt werden. Der Unterschied zwischen beiden Befehlen besteht darin, dass beim Klonen Code von einem Remote-Repository abgerufen wird und dass im Gegensatz dazu beim Auschecken zwischen Code-Versionen gewechselt wird, die sich bereits im lokalen System befinden.

Konsolenfenster
Zugehöriges Material

Git-Protokoll für Fortgeschrittene

Bitbucket-Logo
Lösung anzeigen

Git kennenlernen mit Bitbucket Cloud

Anwendung: zwischen bestehenden Git-Branches wechseln


Nehmen wir einmal an, in dem Repository, in dem du gerade arbeitest, sind bereits Branches vorhanden. Mit git checkout kannst du zwischen diesen Branches wechseln. Führe git branch aus, um zu sehen, welche Branches verfügbar sind und wie der aktuelle Branch heißt.

$> git branch 
main 
another_branch 
feature_inprogress_branch 
$> git checkout feature_inprogress_branch

Im Beispiel oben siehst du, wie du eine Liste verfügbarer Branches mit dem Befehl git branch auflisten und zu einem bestimmten Branch, hier feature_inprogress_branch wechseln kannst.

Zu neuen Git-Branches wechseln


Git checkout arbeitet Hand in Hand mit git branch. Mit dem Befehl git branch kann ein neuer Branch erstellt werden. Wenn du ein neues Feature einführen möchtest, erstellst du einen neuen Branch aus dem main mithilfe von git branch new_branch. Sobald die Erstellung abgeschlossen ist, verwendest du git checkout new_branch, um zu diesem Branch zu wechseln. Zusätzlich akzeptiert der Befehl git checkout ein Argument -b, das eine bequeme Möglichkeit darstellt, um den neuen Branch zu erstellen und sofort zu diesem zu wechseln. Du kannst in einem einzelnen Repository an mehreren Features arbeiten, indem du mit git checkout zwischen ihnen wechselst.

git checkout -b <new-branch>

Im Beispiel oben wird der <new-branch> gleichzeitig erstellt und ausgecheckt. Die Option -b vereinfacht den Prozess und weist Git an, git branch vor git checkout <new-branch> auszuführen.

git checkout -b <new-branch> <existing-branch>

Standardmäßig verwendet git checkout -b den new-branch des aktuellen HEAD als Grundlage. Ein optionaler zusätzlicher Branch-Parameter kann an git checkout angehängt werden. Im Beispiel oben wird existing-branch> angehängt und dient dann als Grundlage für new-branch von existing-branch anstatt des aktuellen HEAD.

In Git Branches wechseln


Das Wechseln von Branches ist ein einfacher Vorgang. Mit folgendem Befehl wird ein Verweis von HEAD zur Spitze von <branchname> erstellt.

git checkout <branchname>

Git legt im Reflog einen Verlauf der Branch-Checkout-Vorgänge an. Mit git reflog kannst du den Verlauf sehen.

git checkout bei Remote-Branches


Bei der Zusammenarbeit im Team werden häufig Remote Repositorys verwendet. Diese Repositorys können gehostet oder freigegeben werden oder es kann sich um die lokale Kopie eines anderen Kollegen handeln. Jedes Remote-Repository besitzt seinen eigenen Satz an Branches. Damit du einen Remote-Branch auschecken kannst, musst du vor dem Checkout die Branch-Inhalte abrufen.

git fetch --all

In neueren Versionen von Git kannst du den Remote-Branch wie einen lokalen Branch auschecken.

git checkout <remotebranch>

Bei älteren Git-Versionen ist es erforderlich, einen neuen Branch auf Basis des Remote Branches zu erstellen.

git checkout -b <remotebranch> origin/<remotebranch>

Zusätzlich kannst du einen neuen lokalen Branch auschecken und ihn auf den letzten Commit des Remote-Branches zurücksetzen.

git checkout -b <branchname>
git reset --hard origin/<branchname>

Detached HEADs


Gerade haben wir die drei wichtigsten Verwendungszwecke von git checkout für Branch-Checkouts kennengelernt. Nun ist es wichtig, dass du den Zustand des "losgelösten" HEADs verstehst. Du erinnerst dich: Als HEAD wird in Git der aktuelle Snapshot bezeichnet. Intern aktualisiert der Befehl git checkout den HEAD lediglich so, dass er auf den angegebenen Branch oder Commit verweist. Zeigt der Verweis auf einen Branch, meldet Git kein Problem. Wenn du allerdings einen Commit auscheckst, wechselst du in einen Zustand mit "losgelöstem" HEAD.

Für dich ist das eine Warnung: Du wirst darauf hingewiesen, dass alle Änderungen, die du vornimmst, von der restlichen Entwicklung des Projekts "losgelöst" sind. Wenn du also bei losgelöstem HEAD mit der Arbeit an einem neuen Feature beginnst, wird kein Branch angelegt, über den du deine Arbeit später referenzieren könntest. Sobald du einen anderen Branch auscheckst, beispielsweise um dein Feature in ihn zu integrieren, hättest du dann keine Möglichkeit, auf dieses Feature zu verweisen:

Angehängter vs. losgelöster Head

Sämtliche Entwicklungsarbeit sollte immer in einem Branch stattfinden, niemals in einem losgelösten HEAD. Nur dann ist sichergestellt, dass du auf deine neuen Commits verweisen kannst. Wenn du dir allerdings lediglich einen alten Commit anschauen möchtest, spielt es keine Rolle, ob du in einem losgelöstem HEAD arbeitest.

Zusammenfassung


Auf dieser Seite lag für das Ändern von Branches der Schwerpunkt auf der Verwendung des Befehls git checkout. Zusammenfassend lässt sich sagen, dass git checkout bei der Verwendung auf Branches das Ziel der HEAD-Ref ändert. Er kann verwendet werden, um Branches zu erstellen, zwischen Branches zu wechseln und um Remote-Branches auszuchecken. Der Befehl git checkout ist ein wichtiges Tool für reguläre Git-Vorgänge. Er ist das Gegenstück zu git merge. Die Befehle git checkout und git merge sind wichtige Tools zur Unterstützung von git workflows.


Diesen Artikel teilen
Nächstes Thema

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Mitarbeiter arbeiten mit unzähligen Tools zusammen

Bitbucket-Blog

Abbildung: DevOps

DevOps-Lernpfad

Demo Den: Feature-Demos mit Atlassian-Experten

So funktioniert Bitbucket Cloud mit Atlassian Open DevOps

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up