git

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.


3 Minuten Lesezeit
12 Okt 2024

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:

  1. Betroffene Dateien öffnen: Git fügt in den Konfliktdateien Markierungen wie <<<<<<<, ======= und >>>>>>> hinzu, um die Konfliktstellen zu kennzeichnen.
  2. Konflikt manuell beheben: Die markierten Abschnitte in der Datei müssen manuell bearbeitet und der Konflikt gelöst werden.
  3. Ä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