Wer mit Git arbeitet, stößt früher oder später auf diese Frage:
Was ist eigentlich der Unterschied zwischen git fetch und git pull?
Beide holen Änderungen vom Remote-Repository und trotzdem verhalten sie sich grundlegend unterschiedlich. Wer das nicht versteht, holt sich schnell unerwartete Merges oder Konflikte ins Projekt.
Die Kurzfassung
In den einfachsten Worten:
git pullist eingit fetchgefolgt von einemgit merge(odergit rebase).
Damit ist der Kern schon beschrieben, die Details sind entscheidend.
Was macht git fetch?
git fetch
git fetch lädt neue Commits vom Remote-Repository herunter und aktualisiert die sogenannten Remote-Tracking-Branches, z. B.:
refs/remotes/origin/main
Wichtig dabei:
- keine lokalen Branches werden verändert
- kein Merge
- kein Rebase
- kein Risiko für den aktuellen Arbeitsstand
git fetch ist daher immer sicher und kann jederzeit ausgeführt werden.
Kurz gesagt: Du holst dir Informationen, aber änderst noch nichts.
Wichtig dabei:
- keine lokalen Branches werden verändert
- kein Merge
- kein Rebase
- kein Risiko für den aktuellen Arbeitsstand
git fetch ist daher immer sicher und kann jederzeit ausgeführt werden.
Kurz gesagt: Du holst dir Informationen, aber änderst noch nichts.
Was macht git pull?
git pull
git pull macht zwei Dinge:
- führt intern ein git fetch aus
- bringt den aktuellen lokalen Branch mit dem Remote-Branch zusammen
Je nach Konfiguration passiert das per:
- git merge (Standard)
- oder git rebase
Aus der Git-Dokumentation:
git pull runs git fetch and then, depending on configuration or flags, calls either git rebase or git merge to reconcile diverging branches.
Das bedeutet:
- dein lokaler Branch ändert sich sofort
- es können Merge-Commits entstehen
- es können Konflikte auftreten
Der entscheidende Unterschied
| Befehl | Holt Änderungen | Verändert lokale Branches |
|---|---|---|
| git fetch | ja | nein |
| git pull | ja | ja |
Wann solltest du welchen Befehl nutzen?
git fetch ist sinnvoll, wenn du:
- erst prüfen willst, was sich geändert hat
- kontrolliert mergen oder rebasen möchtest
- Konflikte vermeiden willst
- verstehen willst, wie weit dein Branch hinterherhinkt
git pull ist sinnvoll, wenn du:
- sicher bist, dass du die Änderungen direkt übernehmen willst
- alleine am Branch arbeitest
- einen schnellen Update-Workflow brauchst
Anderes Thema möchtest du den letzten Commit rückgängig machen? Schau dir mein Tutorial dazu an: Git: Letzte Commits rückgängig machen.