git pull
Auf dieser Seite finden Sie nützliche Informationen zum Befehl git pull, seiner Verwendung, den gängigsten Optionen und wichtigen Hinweisen dazu.
Was git pull macht
git pull lädt neue Commits aus einem Remote-Repository herunter und integriert sie sofort in Ihren aktuellen lokalen Branch. Dies ist der Befehl, den Sie ausführen, um Ihre Arbeit mit dem auf den neuesten Stand zu bringen, was Ihre Teammitglieder gepusht haben.
Unter der Haube ist git pull eine praktische Abkürzung für zwei nacheinander ausgeführte Befehle:
git fetch <remote> # download the new commits
git merge <remote>/<branch> # integrate them into the current branchgit pull entspricht also git fetch gefolgt von git merge. Das Verständnis dieser Aufteilung ist der Schlüssel zum Verständnis des gesamten Befehls: fetch aktualisiert Ihre Remote-Tracking-Branches, ohne Ihre Arbeit zu berühren, und merge (oder rebase, siehe unten) spielt die neue Historie auf Ihren Branch zurück.

Wann Sie es verwenden sollten
git pull ist Teil des Git-"Syncing"-Workflows, zusammen mit git push, git fetch und git remote. Verwenden Sie es immer dann, wenn Ihr lokaler Branch den neuesten Remote-Status widerspiegeln soll, zum Beispiel:
- Bevor Sie mit einem neuen Aufgabenbereich beginnen, damit Sie auf dem neuesten Code aufbauen.
- Bevor Sie git push ausführen, damit Ihr Push als Fast-Forward funktioniert, anstatt als "non-fast-forward" abgelehnt zu werden.
- Um die Commits eines Teammitglieds auf einem gemeinsamen Branch zu übernehmen.
git fetch und git pull laden beide Remote-Inhalte herunter, unterscheiden sich jedoch auf eine wichtige Weise: git fetch aktualisiert nur Ihre Remote-Tracking-Branches und lässt Ihre Arbeitskopie unberührt, während git pull diese Änderungen auch in Ihren aktuellen Branch einbindet. Wenn Sie eingehende Commits vor der Integration prüfen möchten, fetchen Sie zuerst und mergen Sie selbst.
Wie das Merging während eines Pulls funktioniert
Angenommen, Ihr lokaler Branch und der Remote teilen die Historie bis zum Commit E und weichen dann ab. Der Remote hat Commits A, B und C gewonnen, die Sie nicht haben. Das Ausführen von git pull holt diese Commits.

Git erstellt dann einen neuen Merge-Commit, H, der Ihre lokale Arbeit mit den geholten Commits A, B und C verbindet und beide Historienlinien zusammenführt.

Wenn Ihr lokaler Branch nicht abgewichen ist (Sie haben keine neuen lokalen Commits), verschiebt Git einfach Ihren Branch-Zeiger zu den neuen Commits vor. Dies wird als Fast-Forward bezeichnet und erzeugt keinen Merge-Commit.
Mit der Option --rebase spielt Git Ihre lokalen Commits auf die geholten Commits zurück, anstatt einen Merge-Commit zu erstellen, und hält die Historie linear.

Häufige Optionen
| Befehl | Beschreibung |
|---|---|
git pull <remote> | Holt den Remote-Inhalt und bindet ihn direkt in die lokale Kopie ein (entspricht git fetch <remote> gefolgt von git merge <remote>/<current-branch>). |
git pull --no-commit <remote> | Holt und merged, stoppt jedoch vor der Erstellung des Merge-Commits, damit Sie das Ergebnis zuerst prüfen können. |
git pull --rebase <remote> | Rebasiert Ihre lokalen Commits auf die geholten Commits, anstatt zu mergen, und hält die Historie linear. |
git pull --ff-only | Aktualisiert nur, wenn der Merge als Fast-Forward möglich ist; andernfalls bricht es ab, ohne Ihren Branch zu berühren. |
git pull --verbose | Gibt ausführliche Ausgaben aus und zeigt den heruntergeladenen Inhalt sowie Merge-Details während des Pulls. |
Beispiele
Vom Upstream-Branch pullen
Der Aufruf von git pull ohne Argumente holt und merged Änderungen vom Upstream-Branch, der für den aktuellen Branch konfiguriert ist:
git pullDamit dies funktioniert, muss der aktuelle Branch einen Upstream gesetzt haben (Git speichert ihn nach dem ersten git push -u oder git branch --set-upstream-to).
Von einem bestimmten Remote und Branch pullen
Sie können den Remote und den Branch explizit angeben:
git pull <remote> <branch>Dies holt und merged Änderungen vom angegebenen Branch des genannten Remotes. Um beispielsweise den develop-Branch vom origin-Remote zu pullen:
git pull origin developPullen mit Rebase
git pull --rebaseAnstatt zu mergen, spielt dies Ihre lokalen Commits auf die geholten Commits zurück. Das Ergebnis ist eine lineare Historie ohne Merge-Commit, was viele Teams für Feature-Branches bevorzugen. Um dies als Standard für einen Branch festzulegen, konfigurieren Sie git config pull.rebase true. Siehe git rebase für die Abwägungen.
Pullen ohne den Merge zu committen
git pull --no-commitDies holt und merged, stoppt jedoch kurz vor der Erstellung des Merge-Commits und lässt das Ergebnis gestaged, damit Sie es vor dem Committen mit git commit überprüfen (und ändern) können.
Konflikte nach einem Pull lösen
Wenn die Remote-Commits dieselben Zeilen geändert haben, die Sie lokal geändert haben, kann der Merge nicht automatisch abgeschlossen werden, und Git meldet einen Konflikt:
Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.Um ihn zu lösen, öffnen Sie jede konfliktbehaftete Datei, bearbeiten Sie sie, um den richtigen Inhalt beizubehalten (und entfernen Sie die Markierungen <<<<<<<, ======= und >>>>>>>), dann stagen und committen Sie:
git add app.js
git commitWenn Sie den Konflikt gerade nicht lösen möchten, bringt git merge --abort Ihren Branch in den Zustand vor dem Pull zurück.
Das Pullen auf einen Branch mit nicht committeten lokalen Änderungen kann fehlschlagen, weil Git es ablehnt, Ihre Arbeit zu überschreiben. Committen Sie Ihre Änderungen oder verwenden Sie git stash, bevor Sie pullen, und entfernen Sie den Stash danach.