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.
Dieses Tutorial erklärt, was git pull ist, wie es funktioniert und wie es in verschiedenen Szenarien verwendet wird.
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).
git pull
Die grundlegende Syntax für den Befehl git pull
lautet:
git pull <Remote-Repository> <Branch>
origin
).main
).main
-Branch abrufengit 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.
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.
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.
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.
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.
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:
<<<<<<<
, =======
und >>>>>>>
hinzu, um die Konfliktstellen zu kennzeichnen.git add <DateienMitKonflikt>
git commit -m "Konflikt gelöst"
git pull
ohne KonflikteWenn 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.
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.
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).
git pull --rebase
git pull --rebase origin main
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.
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.
git fetch
und dann Mergegit fetch origin main # Änderungen abrufen
git log FETCH_HEAD # Änderungen prüfen
git merge origin/main # Änderungen zusammenführen