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
documents/git_d9zEBdC.jpg

Was lerne ich in diesem Kurs?

Dieses Tutorial erklärt, was git pull ist, wie es funktioniert und wie es in verschiedenen Szenarien verwendet wird.

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