Kurs
Wenn wir an einer Branch in einem Remote-Repository arbeiten wollen, etwa an der Arbeit eines Kollegen oder einer neuen Feature-Branch, stehen wir vor der Aufgabe, diesen Branch lokal verfügbar zu machen und zu aktualisieren.
Zum Glück vereinfacht Git diesen Prozess mit klaren Befehlen, um eine lokale Kopie der Remote-Branch zu erstellen. So können wir zur gewünschten Branch wechseln, Beiträge leisten und effektiv im Team zusammenarbeiten.
Kurz gesagt: Um eine Branch namens <branch_name> auszuchecken, führen wir aus:
git fetch origin <branch_name>
git checkout -b <branch_name> origin/<branch_name>
In diesem Artikel schauen wir uns diese Befehle an und verstehen im Detail, wie sie funktionieren.
Der Zwei-Schritt-Prozess: git fetch und git checkout
Um remote Branches lokal zu bearbeiten, müssen wir zuerst sicherstellen, dass unser lokales Repository auf dem aktuellen Stand des Remote-Repositorys ist. Danach können wir eine lokale Kopie anlegen und auf dieser Branch arbeiten.
Das lokale Repository aktualisieren
Zum Aktualisieren des lokalen Repositorys verwenden wir den git fetch-Befehl. In der einfachsten Form ohne Argumente:
git fetch
Ohne Argumente ruft git fetch alle Branches vom Standard-Remote ab. Das umfasst zwar die gewünschte Branch, belegt aber auch mehr lokalen Speicherplatz.
Wenn Speicherplatz ein Thema ist, können wir gezielt nur die gewünschte Branch holen, indem wir sie als Parameter angeben:
git fetch origin <branch_name>
Ersetze <branch_name> durch den Namen der gewünschten Branch. Der Parameter origin steht für den Namen des Remote-Repositorys. Standardmäßig heißt das Remote nach dem Klonen eines Repositorys origin.
Wichtig: Das Aktualisieren der Remote-Referenzen per fetch ändert keine lokalen Dateien und verursacht keine Konflikte. Lokal gibt es zwei unterschiedliche Bereiche:
- Das aktuelle Arbeitsverzeichnis
- Das lokale Repository
Unsere aktuellen Änderungen und Commits liegen im Arbeitsverzeichnis. Das sind die Dateien, die wir sehen, wenn wir den Repository-Ordner am Rechner öffnen. Dieses Verzeichnis wird durch git fetch nicht aktualisiert. Aktualisiert wird nur das lokale Repository – quasi eine versteckte Kopie des Remote-Repositorys auf unserer Maschine.
Eine Remote-Branch auschecken
Mit einer aktuellen Kopie des Remote-Repositorys können wir nun per git checkout eine lokale Kopie einer Remote-Branch anlegen:
git checkout -b <branch_name> origin/<branch_name>
Ersetze <branch_name> durch den Namen der gewünschten Remote-Branch. Der erste Parameter nach -b ist der Name, den die lokale Branch erhalten soll. Üblicherweise verwenden wir denselben Namen, wir könnten aber auch einen anderen wählen, solange keine andere lokale Branch so heißt:
git checkout -b <local_branch_name> origin/<branch_name>
Nach erfolgreicher Ausführung wechselt Git das Arbeitsverzeichnis auf diese Branch, und wir können direkt loslegen.
git checkout vs git switch
Den Befehl git checkout gibt es seit den Anfängen von Git. Sein Funktionsumfang geht über das Anlegen lokaler Branch-Kopien oder den Wechsel zwischen Branches hinaus. Beispielsweise kann er gezielt bestimmte Dateien aus dem Remote-Repository holen.
In neueren Git-Versionen wurde git switch eingeführt – mit dem klaren Fokus, lokale Kopien von Remote-Branches anzulegen und zwischen lokalen Branches zu wechseln.
Ich empfehle git switch statt git checkout, weil die erweiterten Fähigkeiten von git checkout leichter zu Fehlbedienungen führen können.
Wie du die hier gezeigten Schritte mit git switch ausführst, erfährst du in diesem Tutorial: Git Switch Branch: A Guide With Practical Examples.
Fazit
Eine lokale Kopie einer Remote-Branch zu erstellen, ist für Zusammenarbeit essenziell. Mit git fetch und git checkout aktualisieren wir unser lokales Repository mit Remote-Änderungen und wechseln auf die gewünschte Branch.
Während das klassische git checkout sehr mächtig ist, bietet der neuere Befehl git switch eine schlankere Option speziell für das Branch-Management und reduziert das Fehlerrisiko.
FAQs
Ich bekomme den Fehler: "please commit your changes or stash them before you switch branches." Wie behebe ich das?
Git verhindert den Wechsel auf eine andere Branch, wenn in der aktuellen Branch uncommittete Änderungen liegen. Du löst das, indem du deine Änderungen entweder stashst oder committest.
Zum Committen verwendest du folgenden Befehl:
git commit -m \"Commit message\"
Wenn du die Änderungen vorerst ohne Commit sichern willst, kannst du sie mit git stash temporär ablegen:
git stash
Später kannst du sie auf der ursprünglichen Branch mit git stash pop wieder anwenden.
Was, wenn die Remote-Branch denselben Namen wie eine lokale Branch hat?
Branch-Namen müssen in Git eindeutig sein. Erhalten wir die Meldung, dass die Branch bereits existiert, gibt es lokal schon eine Branch mit diesem Namen. Das kann zwei Dinge bedeuten:
- Wir haben diese Branch schon einmal ausgecheckt. Dann können wir ohne fetch direkt mit
git checkout <branch_name>darauf wechseln. Beachte: Wir lassen hier das-bweg, das sonst das Anlegen einer neuen Branch signalisiert. Da sie bereits existiert, müssen wir sie nicht neu erstellen. - Wir haben irgendwann eine andere Branch erstellt, die zufällig denselben Namen hat. Das lösen wir, indem wir einen anderen lokalen Namen verwenden:
git checkout -b <different_name> origin/<branch_name>.
Kann ich direkt auf einer Remote-Branch Änderungen machen?
Nein. Änderungen an einer Git-Branch entstehen, indem du zuerst eine lokale Kopie wie oben beschrieben erstellst und dann Commits anlegst, die deine Änderungen enthalten.
Wie aktualisiere ich meine lokale Branch mit den neuesten Remote-Änderungen?
Um unsere lokale Branch mit den neuesten Änderungen der zugehörigen Remote-Branch zu aktualisieren, verwenden wir in der Regel git pull:
git pull origin <branch_name>
Dabei werden git fetch und git merge kombiniert, um unsere lokale Branch zu aktualisieren. Wir haben gelernt, dass git fetch das lokale Repository auf den neuesten Remote-Stand bringt. git merge führt diese Änderungen in unsere lokale Branch zusammen. Details findest du in diesem Tutorial zu Git push und pull.
Ich bekomme den Fehler: "remote branch not found." Wie behebe ich das?
Dieser Fehler zeigt an, dass die Branch in unserer lokalen Kopie des Repositorys nicht vorhanden ist. Also entweder:
- Die Branch existiert nicht – eventuell ein Tippfehler im Namen oder eine alte Branch, die bereits gelöscht wurde.
- Das lokale Repository ist nicht aktuell. Wie oben beschrieben, kannst du es mit
git fetchaktualisieren.
