git fetch

Teilen & Aktualisieren

Objekte und Refs aus einem anderen Repository herunterladen


Der Befehl 'git fetch' lädt Commits, Dateien und Refs aus einem Remote-Repository in dein lokales Repo. So siehst du, woran andere gearbeitet haben, ohne diese Änderungen in deine lokalen Branches zu mergen. Anders als 'git pull' ist fetch sicher – es ändert nie dein Arbeitsverzeichnis oder deinen aktuellen Branch. Nach dem Fetch kannst du die Änderungen prüfen und entscheiden, ob du sie mergst.

Syntax

git fetch [<options>] [<repository> [<refspec>...]]
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)...]
git fetch --all [<options>]
[ ] optional| oder<arg> Platzhalter... wiederholbar--flag Option

Optionen

Klicke auf eine Option, um sie aufzuklappen

Einsteiger (4)

Von allen konfigurierten Remotes auf einmal fetchen. Nützlich bei mehreren Remotes wie origin und upstream.

Bei BedarfPraktisch mit mehreren Remotes (Fork + upstream); ein einfacher Fetch deckt eines ab

Beispiel

git fetch --all

Vor dem Fetch alle Remote-Tracking-Branches entfernen, die auf dem Remote nicht mehr existieren. Hält dein Repository sauber.

EmpfohlenEntfernt veraltete origin/*-Refs von Branches, die auf dem Remote gelöscht wurden

Beispiel

git fetch --prune

Alle Tags vom Remote holen, zusätzlich zu allem, was ohnehin geholt würde. Nützlich, um Release-Tags zu bekommen.

Bei BedarfTags auf gefetchten Commits kommen ohnehin; nutze es für Tags auf anderer Historie

Beispiel

git fetch --tags

Zeigen, was passieren würde, ohne etwas zu ändern. Nützlich als Vorschau, was fetch herunterladen wird.

Bei BedarfZeigt vorab, welche Refs aktualisiert würden, ohne etwas zu ändern

Beispiel

git fetch --dry-run

Fortgeschritten (1)

Den Fetch auf die angegebene Zahl von Commits ab der Spitze jedes Remote-Branches begrenzen. In einem Shallow Clone vertieft oder verkürzt das die Historie.

Bei BedarfSpart Zeit in CI oder bei riesigen Repositorys, aber flache Historie schränkt log und merge-base ein

Beispiel

git fetch --depth=1

Die richtige Option wählen

Fetch oder Pull

Den entscheidenden Unterschied zwischen fetch und pull verstehen

BefehlLädt Commits herunterAktualisiert lokalen BranchJederzeit sicher
git fetchJaNein – nur Remote-TrackingJa – ändert nie das Arbeitsverzeichnis
git pullJaJa – mergt in den aktuellenVorsicht – kann Konflikte verursachen
git pull --rebaseJaJa – rebast den aktuellenVorsicht – schreibt lokale Commits um

Fetch-Optionen zum Aufräumen

Optionen, um dein Repository ordentlich zu halten

BefehlEntfernt veraltete BranchesHolt TagsAnwendungsfall
git fetchNoEinige (erreichbare)Normales Update
git fetch --pruneJaEinige (erreichbare)Gelöschte Branches aufräumen
git fetch --tagsNoAlle TagsRelease-Tags holen
git fetch --prune --tagsJaAlle TagsBranches aufräumen + alle Tags holen (rein lokale Tags bleiben)

Umfang des Fetch

Steuern, was geholt wird

BefehlHolt vonAm besten für
git fetchStandard-Remote (origin)Häufigster Einsatz
git fetch originBestimmtes RemoteWenn du mehrere Remotes hast
git fetch --allAlle RemotesFork mit upstream synchronisieren
git fetch origin mainNur ein BranchMinimaler Download

Beispiele

Vom Standard-Remote fetchen

git fetch

Lädt neue Commits vom Standard-Remote (meist 'origin') herunter, ohne zu mergen.


Von einem bestimmten Remote fetchen

git fetch origin

Ausdrücklich vom Remote 'origin' fetchen.


Alle Remotes fetchen

git fetch --all

Von allen konfigurierten Remotes auf einmal fetchen.


Fetchen und veraltete Branches entfernen

git fetch --prune

Fetchen und Remote-Tracking-Branches entfernen, die auf dem Remote nicht mehr existieren.

Workflow-Beispiele

1
git fetch origin

Remote-Änderungen herunterladen, ohne zu mergen

2
git log main..origin/main

Remote-Commits sehen, die nicht in deinem lokalen Branch sind

3
git diff main...origin/main

Die Codeänderungen auf dem Remote prüfen

4
git merge origin/main

Mergen, wenn du so weit bist

1
git remote add upstream <original-repo-url>

Das Original-Repo als upstream hinzufügen (einmalig)

2
git fetch upstream

Das Neueste aus dem Original-Repo holen

3
git checkout main

Auf deinen main-Branch wechseln

4
git merge upstream/main

Die upstream-Änderungen in deinen Fork mergen

5
git push origin main

Den aktualisierten Fork zu deinem GitHub pushen

1
git fetch --prune

Fetchen und veraltete Remote-Tracking-Branches entfernen

2
git branch -vv

Lokale Branches und ihren Tracking-Status anzeigen

3
git branch -d old-feature

Lokale Branches löschen, die gelöschten Remotes gefolgt sind

Fehlerbehebung

fatal: 'origin' does not appear to be a git repository

Ursache: Es ist kein Remote namens 'origin' konfiguriert

Prüfe die Remotes mit 'git remote -v'. Füge eins mit 'git remote add origin <url>' hinzu

Gefetcht, aber mein lokaler Branch hat sich nicht aktualisiert

Ursache: Fetch aktualisiert nur Remote-Tracking-Branches, keine lokalen Branches

Das ist so gewollt! Führe 'git merge origin/main' oder 'git pull' aus, um deinen lokalen Branch zu aktualisieren

error: cannot lock ref - unable to update local ref

Ursache: Eine veraltete Remote-Tracking-Ref kollidiert mit einem neuen Branch-Namen (z. B. 'feature' vs. 'feature/login')

Führe 'git remote prune origin' oder 'git fetch --prune' aus, um die veralteten Refs zu entfernen, und fetche dann erneut

Gelöschte Remote-Branches tauchen weiter auf

Ursache: Veraltete Remote-Tracking-Branches müssen entfernt werden

Nutze 'git fetch --prune' oder 'git remote prune origin'

Fetch ist sehr langsam oder lädt zu viel

Ursache: Du holst die ganze Historie, brauchst aber nur die neuesten Commits

Nutze 'git fetch --depth=1' für einen flachen Fetch oder hole nur einen bestimmten Branch

Tipps & Stolperfallen

Best Practices

  • ✓Fetche vor Arbeitsbeginn, um zu sehen, ob es Remote-Änderungen gibt, die du kennen solltest
  • ✓Nutze regelmäßig --prune, damit dein Repository frei von veralteten Branches bleibt
  • ✓Nutze lieber fetch + merge statt pull, wenn du Änderungen vor dem Integrieren prüfen willst
  • ✓Richte 'git config fetch.prune true' ein, damit bei jedem Fetch aufgeräumt wird
  • ✓Nutze 'git fetch --all' bei der Arbeit mit Forks, um origin und upstream gleichzeitig zu synchronisieren

Häufige Fehler

  • ✗Erwarten, dass fetch dein Arbeitsverzeichnis aktualisiert – es aktualisiert nur Remote-Tracking-Branches, nicht deine lokalen Branches.
  • ✗Nach dem Fetch das Mergen oder Rebasen vergessen – fetch lädt herunter, integriert aber nichts.
  • ✗--prune nicht regelmäßig nutzen, sodass veraltete Remote-Tracking-Branches dein Repo zumüllen.
  • ✗fetch mit pull verwechseln – pull = fetch + merge, während fetch nur der Download-Schritt ist.

FAQ

A:

Fetch lädt Commits herunter, ändert aber deine lokalen Branches nicht. Pull = fetch + merge (oder rebase). Fetch ist sicherer, weil du Änderungen vor dem Integrieren prüfen kannst.

A:

Fetch aktualisiert nur Remote-Tracking-Branches (wie origin/main), nicht deine lokalen Branches. Zum Aktualisieren deines lokalen Branches musst du mergen oder rebasen.

A:

Nutze 'git log main..origin/main', um Remote-Commits zu sehen, die nicht in deinem lokalen Branch sind, oder 'git diff main...origin/main', um die Codeänderungen auf dem Remote zu sehen.

A:

Fetch, wenn du Änderungen erst prüfen willst oder an wichtigen Branches arbeitest. Pull für schnelle Updates, wenn du den eingehenden Änderungen vertraust.

A:

Nutze 'git fetch origin branch-name', um nur diesen Branch zu holen. Praktisch bei großen Repos, wenn du nicht alles brauchst.

A:

Es entfernt Remote-Tracking-Branches, die auf dem Remote nicht mehr existieren. Hält dein Repo sauber, wenn Kollegen gemergte Branches löschen.