git pull

Teilen & Aktualisieren

Von einem anderen Repository oder lokalen Branch holen und integrieren


Der Befehl 'git pull' holt Inhalte aus einem Remote-Repository und integriert sie sofort in deinen lokalen Branch. Im Kern ist das 'git fetch' gefolgt von 'git merge' (oder 'git rebase' mit der Option --rebase). Das ist der übliche Weg, dein lokales Repository mit den Änderungen anderer zu synchronisieren. Bei git pull lädt Git zuerst alle neuen Commits vom Remote herunter und integriert sie dann in deinen aktuellen Branch. Ist dein Branch nur im Rückstand, spult es per Fast-Forward vor; haben beide Seiten neue Commits, hält modernes Git an und lässt dich zwischen Merge und Rebase wählen (--no-rebase / --rebase oder die Einstellung pull.rebase). Gibt es kollidierende Änderungen, hält Git an und bittet dich, die Konflikte zu lösen, bevor der Merge abgeschlossen wird.

Syntax

git pull [--rebase | --no-rebase] [--ff-only | --ff | --no-ff] [--commit | --no-commit] [--autostash | --no-autostash] [-q | --quiet] [-v | --verbose] [--depth=<depth>] [--prune] [--tags | --no-tags] [--recurse-submodules[=yes|on-demand|no]] [<repository> [<refspec>...]]
[ ] optional| oder<arg> Platzhalter... wiederholbar--flag Option

Optionen

Klicke auf eine Option, um sie aufzuklappen

Einsteiger (7)

Der Name des Standard-Remotes. Beim Klonen nennt Git das Remote automatisch 'origin'. Du kannst ausdrücklich von origin pullen oder dich auf die Standard-Tracking-Konfiguration verlassen.

Bei BedarfNennt Remote und Branch ausdrücklich; einfaches git pull nutzt den Upstream

Beispiel

git pull origin main

Nach dem Fetch den aktuellen Branch auf den Upstream-Branch rebasen. Das ergibt eine lineare Historie, indem deine lokalen Commits auf den geholten neu abgespielt werden – ohne Merge-Commits.

EmpfohlenWendet deine nicht gepushten Commits obendrauf neu an und hält die Historie linear

Beispiel

git pull --rebase origin main

Kurzform für --rebase=false. Übergeht jede Konfiguration, die standardmäßig rebast, und erzwingt beim Integrieren geholter Änderungen einen Merge statt eines Rebase. Erzeugt einen Merge-Commit, wenn die Historien abweichen.

Bei BedarfMergt ausdrücklich, wenn Branches auseinandergelaufen sind oder die Konfiguration standardmäßig rebast

Beispiel

git pull --no-rebase origin main

Nur aktualisieren, wenn der lokale Branch per Fast-Forward vorrücken kann (keine lokalen Commits vor dem Remote). Scheitert bei abweichender Historie, verhindert so versehentliche Merges und lässt dich entscheiden, wie integriert wird.

EmpfohlenErzeugt nie überraschende Merges; hält an, damit du bei auseinandergelaufenen Branches wählst

Beispiel

git pull --ff-only origin main

Ausführliche Ausgabe. Zeigt Details zu Fetch und Merge, etwa welche Refs aktualisiert werden, und Statistiken zur Objektübertragung.

Bei BedarfZum Debuggen dessen, was fetch und merge tun

Beispiel

git pull -v origin main

Ausgabe während Fetch und Merge unterdrücken. Nur Fehler werden angezeigt. Nützlich in Skripten, die still laufen sollen.

Bei BedarfFür Skripte; blendet Fortschritt und Merge-Ausgabe aus

Beispiel

git pull -q origin main

Lokale Änderungen vor dem Pull automatisch stashen und danach wieder anwenden (funktioniert beim Pull per Merge und per Rebase; gibt es beim Wiederanwenden Konflikte, bleiben deine Änderungen sicher im Stash). Perfekt, wenn du nicht committete Änderungen hast, aber mit dem Remote synchronisieren musst.

Bei BedarfPraktisch bei nicht committeter Arbeit; bei einem Konflikt beim Zurückholen bleibt sie im Stash

Beispiel

git pull --rebase --autostash origin main

Fortgeschritten (6)

Den Merge durchführen, aber vor dem Merge-Commit anhalten. So kannst du das Ergebnis vor dem Commit prüfen und bei Bedarf ändern.

Bei BedarfHält vor dem Merge-Commit an, damit du das Ergebnis prüfen kannst

Beispiel

git pull --no-commit origin main

Vor dem Fetch Remote-Tracking-Refs entfernen, die auf dem Remote nicht mehr existieren. Hilft, dein lokales Repository frei von veralteten Branches zu halten. Räumt nur auf, wenn die konfigurierten Refspecs des Remotes genutzt werden – 'git pull --prune origin main' räumt nichts auf.

Bei BedarfRäumt veraltete Remote-Tracking-Refs auf; wirkungslos bei ausdrücklicher Refspec

Beispiel

git pull --prune

Zusätzlich zu dem, was normalerweise geholt wird, alle Tags vom Remote holen. Nützlich, um Release-Tags zu synchronisieren.

Bei BedarfFetcht auch Tags außerhalb der gepullten Historie; selten nötig

Beispiel

git pull --tags origin main

Automatisches Tag-Folgen abschalten: Standardmäßig werden auch Tags geholt, die auf heruntergeladene Commits zeigen. Übergeht die Einstellung remote.<name>.tagOpt. Nützlich, wenn du nur Branch-Updates willst.

Bei BedarfÜberspringt das automatische Folgen von Tags bei reinen Branch-Updates

Beispiel

git pull --no-tags origin main

Das Holen auf die angegebene Zahl von Commits ab der Spitze jedes Remote-Branches begrenzen. Erzeugt oder vertieft einen Shallow Clone. Nützlich bei großen Repositories.

Bei BedarfHält einen flachen Klon flach (CI); historiebasierte Befehle sehen weniger

Beispiel

git pull --depth=1 origin main

Alle Remotes fetchen. Statt von einem einzigen Remote wird vor dem Merge von allen konfigurierten geholt.

Bei BedarfFetcht alle Remotes, mergt aber nur den aktuellen Upstream

Beispiel

git pull --all

Erfahren (4)

Steuern, ob Submodule rekursiv geholt und aktualisiert werden. Werte: 'yes' (immer), 'on-demand' (wenn das Hauptprojekt die Submodul-Ref ändert), 'no' (nie).

Bei BedarfNur in Repositorys mit Submodulen, um sie synchron zu halten

Beispiel

git pull --recurse-submodules=on-demand origin main

Ein flaches Repository in ein vollständiges umwandeln, indem die ganze fehlende Historie geholt wird. Nur beim Pull in einen Shallow Clone gültig.

Bei BedarfMacht einen flachen Klon vollständig, wenn du die ganze Historie brauchst

Beispiel

git pull --unshallow origin main

Die angegebene Merge-Strategie nutzen. Übliche Strategien: ort (Standard), resolve, octopus, ours, subtree. recursive wird noch akzeptiert, ist seit Git 2.50 aber nur ein Synonym für ort.

Bei BedarfSelten nötig; die Standardstrategie ort passt zu fast jedem Pull

Beispiel

git pull -s ort origin main

Das Mergen von Historien ohne gemeinsamen Vorfahren erlauben. Nötig, um zwei unabhängig entstandene Repositories zusammenzuführen.

Nicht empfohlenNur, um getrennte Repositorys absichtlich zu verbinden; sonst verdeckt es einen Fehler

Beispiel

git pull --allow-unrelated-histories origin main

Die richtige Option wählen

Pull-Strategie: Merge oder Rebase

Die grundlegende Wahl, die deine Commit-Historie prägt

BefehlErzeugt Merge-CommitArt der HistorieAm besten für
git pullHängt von der Konfiguration ab (scheitert bei Abweichung ohne Einstellung)Gesetzt über pull.rebase / pull.ffFast-Forward, wenn nur im Rückstand
git pull --rebaseNoLinearFeature-Branches, saubere Historie
git pull --no-rebaseJa (bei Abweichung)Bewahrt BranchesRebase-Konfiguration übergehen, Merge erzwingen
git pull --ff-onlyNoLinear (scheitert bei Abweichung)Sicherstellen, dass keine versehentlichen Merges entstehen

Sicherheits- und Kontrolloptionen

Optionen, um Fehler zu vermeiden und die Kontrolle zu behalten

BefehlVerhindertVerhaltenWann verwenden
--ff-onlyUnerwartete MergesScheitert, wenn kein Fast-Forward möglich istCI/CD, geschützte Branches
--no-commitAuto-CommitMergt, hält aber vor dem Commit anMerge vor dem Commit prüfen
--autostashFehler durch geändertes ArbeitsverzeichnisStash → pull → popSchneller Sync mit nicht committeter Arbeit
--dry-runBeliebige ÄnderungenZeigt, was fetch herunterladen würde; kein MergeVorschau eingehender Refs

Was geholt wird

Steuern, welche Refs und wie viel Historie heruntergeladen werden

BefehlHolt TagsHolt die ganze HistorieAnwendungsfall
git pullAuto (gefolgte Tags)JaNormaler Workflow
--tagsAlle TagsJaRelease-Versionen synchronisieren
--no-tagsNoJaBandbreite sparen, nur Branch synchronisieren
--depth=NAuto (gefolgte Tags)Nur die letzten N CommitsGroße Repos, CI-Builds
--unshallowAuto (gefolgte Tags)Macht aus flach vollständigNach einem Shallow Clone die ganze Historie nötig

Remote- und Branch-Verwaltung

Optionen für mehrere Remotes und veraltete Refs

BefehlUmfangRäumt aufSzenario
git pull origin mainEin Remote/BranchNoNormaler Pull von origin
--allAlle RemotesNoVon origin + upstream synchronisieren
--pruneEin RemoteGelöschte BranchesVeraltete Tracking-Refs entfernen

Fortgeschrittene Szenarien

Optionen für komplexe oder ungewöhnliche Situationen

BefehlLöstRisikoTypisches Szenario
--allow-unrelated-historiesKein gemeinsamer VorfahreMittelZwei getrennte Repos mergen
-s <strategy>Besondere Merge-Anforderungen (verhindert keine Konflikte)NiedrigEinen bestimmten Merge-Algorithmus erzwingen
--recurse-submodulesVeraltete SubmoduleNiedrigProjekte mit Git-Submodulen

Workflow-Beispiele

1
git status

Nach nicht committeten Änderungen sehen, die kollidieren könnten

2
git stash

Nicht committete Arbeit bei Bedarf stashen (oder --autostash nutzen)

3
git pull --rebase origin main

Mit Rebase pullen, damit die Historie sauber bleibt

4
git stash pop

Die gestashte Arbeit wiederherstellen, falls du vorher gestasht hast

1
git checkout feature-branch

Auf deinen Feature-Branch wechseln

2
git pull --no-rebase origin main

Den neuesten main in deinen Feature-Branch mergen (ausdrücklich, da die Branches abgewichen sind)

3
git push origin feature-branch

Den aktualisierten Feature-Branch pushen

1
git fetch origin

Remote-Änderungen herunterladen, ohne das Arbeitsverzeichnis zu ändern

2
git log HEAD..origin/main

Sehen, welche Commits du gleich pullst

3
git diff HEAD...origin/main

Die Änderungen auf dem Remote prüfen

4
git pull origin main

Pullen, wenn du mit den Änderungen zufrieden bist

1
git pull --no-rebase origin main

Einen Pull per Merge versuchen – kann Konflikte ergeben

2
git status

Sehen, welche Dateien Konflikte haben (als 'both modified' markiert)

3
(edit conflicted files)

Dateien öffnen und die Konfliktmarker (<<<<<<<, =======, >>>>>>>) auflösen

4
git add <resolved-files>

Die gelösten Dateien stagen

5
git commit

Den Merge mit einem Commit abschließen

1
git pull --rebase --autostash origin main

Änderungen automatisch stashen, pullen und wieder anwenden

Fehlerbehebung

Your local changes would be overwritten by merge

Ursache: Du hast nicht committete Änderungen in Dateien, die der Pull ändern würde

Committe deine Änderungen zuerst (git add . && git commit), stashe sie (git stash) oder nutze git pull --rebase --autostash

git stash && git pull && git stash pop

Refusing to merge unrelated histories

Ursache: Remote- und lokales Repository haben keinen gemeinsamen Vorfahren (z. B. beim Pull in ein frisch initialisiertes Repo)

Das Mergen unabhängiger Historien erlauben – üblich, wenn man einem bestehenden lokalen Repo ein Remote hinzufügt

git pull --allow-unrelated-histories origin main

Merge-Konflikt in Datei(en)

Ursache: Du und das Remote habt dieselben Zeilen einer Datei geändert

Öffne die Konfliktdateien, suche die Marker (<<<<<<<, =======, >>>>>>>), löse sie, dann git add und git commit. Oder brich mit git merge --abort ab

git add <resolved-file> && git commit

Not possible to fast-forward, aborting

Ursache: Du hast --ff-only genutzt (oder pull.ff=only ist gesetzt), aber dein lokaler Branch ist vom Remote abgewichen

Nutze stattdessen Rebase (git pull --rebase) oder erlaube einen Merge-Commit (git pull --no-rebase)

git pull --rebase origin main

Cannot pull with rebase: You have unstaged changes

Ursache: Ein Pull mit Rebase braucht einen sauberen Arbeitsbaum, und du hast nicht committete Änderungen

Committe oder stashe deine Änderungen, oder nutze Autostash, damit das automatisch passiert

git pull --rebase --autostash

No tracking information for the current branch

Ursache: Dein Branch ist nicht so eingerichtet, dass er einem Remote-Branch folgt

Setze den Upstream-Branch ausdrücklich oder gib Remote und Branch im Pull-Befehl an

git branch --set-upstream-to=origin/main main

'origin' does not appear to be a git repository

Ursache: Es ist kein Remote namens 'origin' konfiguriert

Prüfe deine Remotes mit git remote -v und füge origin hinzu oder nutze den richtigen Remote-Namen

git remote add origin <url>

You have divergent branches and need to specify how to reconcile them

Ursache: Beide Seiten haben neue Commits, und weder pull.rebase noch pull.ff ist gesetzt – also weigert sich modernes Git zu raten (ältere Versionen ab 2.27 warnten nur)

Gib Merge (--no-rebase) oder Rebase (--rebase) an oder lege mit git config pull.rebase einen Standard fest

git config --global pull.rebase true

Tipps & Stolperfallen

Best Practices

  • ✓Prüfe vor dem Pull immer git status, um Konflikte mit nicht committeten Änderungen zu vermeiden
  • ✓Nutze git pull --rebase, damit die Historie auf Feature-Branches sauber und linear bleibt
  • ✓Setze pull.rebase=true global, wenn du Rebase als Standard willst: git config --global pull.rebase true
  • ✓Nutze zuerst git fetch, wenn du Änderungen vor dem Integrieren prüfen willst
  • ✓Nutze --ff-only, wenn du sichergehen willst, dass nicht versehentlich Merge-Commits entstehen
  • ✓Richte beim ersten Push mit git push -u das Branch-Tracking ein, das vereinfacht spätere Pulls
  • ✓Nutze --autostash, wenn du nicht committete Änderungen hast, aber schnell pullen musst
  • ✓Pulle main/master regelmäßig, um später große, komplexe Merges zu vermeiden
  • ✓Löse Konflikte sofort – lass dein Repository nie im Konfliktzustand
  • ✓Nutze git pull --prune, um veraltete Remote-Tracking-Branches aufzuräumen
  • ✓Nutze eventuell git fetch + git merge, um mehr Kontrolle über die Integration zu haben
  • ✓Prüfe vor dem Pull immer, dass du auf dem richtigen Branch bist, damit keine Änderungen vermischt werden

Häufige Fehler

  • ✗Mit nicht committeten Änderungen pullen: Das kann Merge-Konflikte verursachen oder ganz scheitern. Committe oder stashe deine Änderungen vorher, oder nutze --autostash, damit das automatisch passiert.
  • ✗pull und fetch nicht auseinanderhalten: 'git pull' mergt automatisch, was überraschen kann. Nutze zuerst 'git fetch', wenn du Änderungen vor dem Integrieren prüfen willst.
  • ✗merge nutzen, wo rebase sauberer wäre: Auf Feature-Branches erzeugt 'git pull --rebase' eine saubere lineare Historie ohne unnötige Merge-Commits.
  • ✗Merge-Konflikte ignorieren: Nach einem Pull mit Konflikten musst du sie lösen und committen. Lass dein Repository nie im Konfliktzustand.
  • ✗In den falschen Branch pullen: Prüfe vor dem Pull immer deinen aktuellen Branch mit 'git status'. In main zu pullen, obwohl du einen Feature-Branch meintest, kann Probleme machen.

FAQ

A:

git fetch lädt nur neue Commits vom Remote herunter, ohne dein Arbeitsverzeichnis oder deine lokalen Branches zu ändern. git pull macht einen Fetch UND mergt (oder rebast) diese Änderungen automatisch in deinen aktuellen Branch. Nutze fetch, wenn du Änderungen vor dem Integrieren prüfen willst.

A:

Nutze --rebase, wenn du eine saubere, lineare Historie willst (besonders auf Feature-Branches). Deine lokalen Commits werden dann auf den geholten Commits neu abgespielt, statt einen Merge-Commit zu erzeugen. Nutze den normalen Pull (Merge), wenn du genau erhalten willst, wann welche Änderung gemacht wurde.

A:

Ein Fast-Forward passiert, wenn dein lokaler Branch keine neuen Commits hat, die das Remote nicht hat. Git schiebt deinen Branch-Zeiger einfach bis zum Remote vor – ohne Merge-Commit. Hast du lokale Commits, muss Git entweder einen Merge-Commit erzeugen oder rebasen – und wenn du weder --rebase/--no-rebase angibst noch pull.rebase setzt, hält modernes Git mit „Need to specify how to reconcile divergent branches“ an.

A:

Nutze git pull --rebase, um deine lokalen Commits auf den Remote-Commits neu abzuspielen – das ergibt eine lineare Historie. Oder nutze git pull --ff-only, das nur klappt, wenn ein Fast-Forward möglich ist (scheitert, wenn du lokale Commits voraus hast).

A:

Kommt drauf an. Beim Pull per Merge lässt Git es zu, wenn die eingehenden Commits die von dir geänderten Dateien nicht berühren; sonst verweigert es mit „Your local changes ... would be overwritten by merge“. Mit --rebase blockiert jede nicht committete Änderung den Pull. Am besten: vorher committen oder git pull --rebase --autostash nutzen, das deine Änderungen automatisch stasht und wiederherstellt.

A:

Git pausiert den Merge und markiert die Konfliktdateien. Öffne jede, suche die Konfliktmarker (<<<<<<<, =======, >>>>>>>), löse sie, dann git add auf die Datei und git commit, um den Merge abzuschließen. Mit git merge --abort brichst du ab (bei git pull --rebase: git rebase --continue / git rebase --abort).

A:

Direkt nach dem Pull: git reset --hard ORIG_HEAD – Git sichert deine vorige Spitze bei Merges, Fast-Forwards und Rebases in ORIG_HEAD. Nutze nicht HEAD~1: Ein Fast-Forward kann mehrere Commits gebracht haben. --hard verwirft auch nicht committete Änderungen. Hat sich ORIG_HEAD seitdem bewegt, findest du die alte Spitze mit git reflog.

A:

Meist pullst du vom falschen Branch oder Remote. Prüfe: git branch -vv für die Tracking-Infos, git remote -v für die Remotes, dann git fetch --all und git log origin/main, um die Remote-Commits zu sehen.

A:

git pull origin main gibt Remote und Branch ausdrücklich an. git pull (ohne Argumente) nutzt den für deinen aktuellen Branch konfigurierten Tracking-Branch. Ist kein Tracking eingerichtet, bekommst du einen Fehler, der dich um die Angabe bittet.

A:

Global: git config --global pull.rebase true (für Rebase) oder git config --global pull.rebase false (für Merge). Du kannst es auch pro Repository ohne --global setzen oder pro Branch mit git config branch.<name>.rebase true.