Von Gast (nicht überprüft) , 29 April 2026

Einführung

Ein Remote-Tracking-Branch ist eine lokale Ref, die einen Branch auf einem Remote spiegelt. Sie leben unter refs/remotes/<remote>/ und werden von git fetch aktualisiert (und Operationen, die fetch implizieren, wie git pull und git clone). Sie committen nicht direkt auf sie.

Woher sie kommen

Die Standard-Refspec für origin lautet:

+refs/heads/*:refs/remotes/origin/*

Wenn der Server also refs/heads/main hat, bekommt Ihr Klon refs/remotes/origin/main. Das führende + bedeutet "Force Update".

Auflisten

git branch -r
git branch -a                # lokal + Remote-Tracking
git branch -vv               # zeigt Upstream der lokalen

Einen lokalen Branch verknüpfen

git switch feature/login                       # erstellt automatisch lokal aus origin/feature/login
git switch -c mine origin/feature/login        # explizit
git branch -u origin/main                      # Upstream des aktuellen Branches setzen
git branch --unset-upstream

Die Upstream-Verknüpfung steuert die voraus/zurück-Anzeige von git status und die Standardziele für git push und git pull.

Aufräumen

Remote-Tracking-Branches verschwinden nicht, wenn der Remote-Branch gelöscht wird. Räumen Sie sie auf:

git fetch --prune
git remote prune origin
git config --global fetch.prune true

Das spezielle Remote-HEAD

Jeder Remote hat ein symbolisches HEAD, das seinen Standard-Branch angibt:

git symbolic-ref refs/remotes/origin/HEAD
git remote set-head origin --auto    # Server abfragen

Das ist es, was origin allein zu origin/main auflöst (oder welcher Standard auch immer).

Diff gegen einen Remote-Tracking-Branch

git fetch
git log HEAD..origin/main --oneline      # was Upstream ist
git log origin/main..HEAD --oneline      # was nur lokal ist
git diff @{u}                            # gegen Upstream

@{u} (oder @{upstream}) ist die Kurzform für das konfigurierte Upstream des aktuellen Branches.

Push-Verhalten

Die Voreinstellung push.default = simple pusht den aktuellen Branch zu seinem Upstream gleichen Namens. Wenn Sie einen Branch ohne Upstream pushen und push.autoSetupRemote = true haben (Git 2.37+), wird das Upstream automatisch erstellt.

Refspec-Details

Die Fetch-Refspec für einen Remote kann angepasst werden, um zusätzliche Refs zu fetchen oder anders abzubilden. Zum Beispiel um zusätzlich GitHub-PR-Refs und GitLab-MR-Refs zu pullen:

git config --add remote.origin.fetch '+refs/pull/*/head:refs/remotes/origin/pr/*'
git config --add remote.origin.fetch '+refs/merge-requests/*/head:refs/remotes/origin/mr/*'

Das führende + bedeutet "Force Update", nötig weil PR-Refs sich bewegen können (Rebases auf dem PR-Branch). Nach dem Fetchen erscheinen die PRs des Servers als lokale origin/pr/*-Refs, bereit für git switch -c review/<n> origin/pr/<n>.

Häufige Fehler

git checkout origin/main versuchen und editieren wollen; es bringt Sie in Detached HEAD, weil origin/main readonly ist. Erstellen Sie stattdessen einen Tracking-Branch. Vergessen, git fetch auszuführen, und sich von veralteten voraus/zurück-Zählungen täuschen lassen. Remote-Tracking-Branches behandeln, als würde das Pushen darauf den Server aktualisieren; sie sind lokale Spiegel. Verwenden Sie git push origin main. Schließlich: origin/main mit git branch -dr löschen und annehmen, der Server-Branch sei weg; ist er nicht. Verwenden Sie git push origin --delete main, und nur wenn Sie es meinen.