Git Tutorial: Pull
git pull ist eine einfache und nützliche Möglichkeit, lokale Branches mit einem Remote-Repository zu synchronisieren. Es kombiniert die Schritte **Fetch** und **Merge** und hilft, die neuesten Änderungen im lokalen Repository zu integrieren. In Fällen, in denen mehr Kontrolle gewünscht ist, kann `git pull --rebase` oder eine separate Ausführung von `git fetch` und `git merge` nützlich sein.
Bernd Fischer
12. Okt 2024 · 3 Minuten Lesezeit
Was ist git pull?
git pull ist ein Git-Befehl, der zwei Operationen kombiniert:
1. Fetch – Git holt die neuesten Änderungen aus einem Remote-Repository.
2. Merge – Git integriert die Änderungen in den aktuellen Branch des lokalen Repositories.
Mit anderen Worten: git pull ruft die neuesten Commits von einem Remote-Branch ab und versucht, sie automatisch mit dem aktuellen Branch zu verschmelzen (merge).
Syntax von git pull
Die grundlegende Syntax für den Befehl git pull lautet:
git pull <Remote-Repository> <Branch>
- Remote-Repository: Der Name des Remote-Repositories, von dem die Änderungen abgerufen werden sollen (z. B.
origin). - Branch: Der Branch, von dem die Änderungen abgerufen werden sollen (z. B.
main).
Beispiel: Aktuelle Änderungen vom main-Branch abrufen
git pull origin main
In diesem Beispiel werden die neuesten Änderungen aus dem main-Branch des Remote-Repositories origin abgerufen und mit dem aktuellen Branch zusammengeführt.
1. Fetch und Merge – Was passiert bei einem git pull?
Wie bereits erwähnt, führt git pull zwei Schritte aus: fetch und merge. Diese Schritte können auch separat ausgeführt werden, um mehr Kontrolle über den Prozess zu haben.
Fetch: Änderungen abrufen
Mit git fetch werden die Änderungen aus dem Remote-Repository in das lokale Repository heruntergeladen, jedoch noch nicht in den aktuellen Branch integriert.
git fetch origin main
Dieser Befehl ruft die Änderungen aus dem main-Branch ab, integriert sie aber nicht. Die Änderungen werden in einem speziellen Bereich namens FETCH_HEAD gespeichert.
Merge: Änderungen integrieren
Nach dem Abrufen der Änderungen mit git fetch können die Änderungen manuell zusammengeführt (gemerged) werden:
git merge origin/main
Dieser Befehl führt die heruntergeladenen Änderungen aus dem main-Branch in den aktuellen Branch zusammen.
2. Automatischer Merge-Konflikt
Wenn es keine Konflikte gibt, wird git pull die Änderungen automatisch zusammenführen. Es kann jedoch zu Merge-Konflikten kommen, wenn die lokalen Änderungen nicht mit den Änderungen im Remote-Repository übereinstimmen. In diesem Fall muss der Konflikt manuell gelöst werden.
Beispiel: Umgang mit einem Merge-Konflikt
Angenommen, nach dem Ausführen von git pull tritt ein Konflikt auf. Git wird in der Regel eine Fehlermeldung anzeigen und die betroffenen Dateien markieren. So wird ein Konflikt gelöst:
- Betroffene Dateien öffnen: Git fügt in den Konfliktdateien Markierungen wie
<<<<<<<,=======und>>>>>>>hinzu, um die Konfliktstellen zu kennzeichnen. - Konflikt manuell beheben: Die markierten Abschnitte in der Datei müssen manuell bearbeitet und der Konflikt gelöst werden.
- Änderungen bestätigen: Nachdem der Konflikt behoben ist, werden die Änderungen hinzugefügt und ein Commit erstellt.
git add <DateienMitKonflikt>
git commit -m "Konflikt gelöst"
3. Schnelle Aktualisierung mit git pull ohne Konflikte
Wenn es keine lokalen Änderungen gibt oder die lokalen Änderungen vollständig mit den Remote-Änderungen übereinstimmen, wird git pull ohne Probleme ausgeführt und die Änderungen werden zusammengeführt. Das ist der häufigste Fall bei der täglichen Arbeit mit Git.
Beispiel: Ein einfacher git pull
git pull
Wenn keine speziellen Remote-Repositories oder Branches angegeben werden, wird git pull die Änderungen aus dem Standard-Remote-Repository (meist origin) und dem aktuellen Branch abrufen.
4. git pull --rebase
Eine Alternative zum Standard-Merge ist die Verwendung von git pull --rebase. Anstatt die Änderungen durch einen Merge zu integrieren, werden hier die lokalen Commits auf die neueste Version des Remote-Branchs „umgebogen“ (rebase).
Beispiel: git pull --rebase
git pull --rebase origin main
- Rebase: Die lokalen Commits werden auf die neueste Version des
main-Branch angewendet, sodass keine zusätzlichen Merge-Commits entstehen. Das führt zu einer „saubereren“ Commit-Historie.
Rebase ist besonders nützlich, um Merge-Commit-Spam zu vermeiden und eine lineare Historie beizubehalten.
5. Unterschied zwischen git pull und git fetch
git fetch: Ruft die Änderungen aus dem Remote-Repository ab, ohne die Änderungen im aktuellen Branch zu integrieren.git pull: Ruft die Änderungen ab und führt sie direkt zusammen (Fetch + Merge).
Verwendung von git fetch bietet mehr Kontrolle, da es ermöglicht, den Merge-Schritt manuell auszuführen und Änderungen vor dem Zusammenführen zu überprüfen.
Beispiel: git fetch und dann Merge
git fetch origin main # Änderungen abrufen
git log FETCH_HEAD # Änderungen prüfen
git merge origin/main # Änderungen zusammenführen