Git: Aktualisieren von Remote-Zweiginformationen

125

In einem Git-Repository wurde ein Remote-Zweig gelöscht, den ich nicht verfolge. Wenn ich tippe

git branch -r

Der gelöschte Zweig wird weiterhin angezeigt (und ich kann ihn überprüfen).

Welchen git-Befehl muss ich ausführen, um diese Informationen zu aktualisieren?

Bain Markev
quelle

Antworten:

39

Wenn Sie so etwas durchführen

git branch -d -r remote_name/branch_name

Sie entfernen nur Ihre lokale Kasse. Dieser Befehl hat keine Auswirkungen auf das Remote-Repository, weshalb er immer noch angezeigt wird.

Lösung:

git push origin :branch_name

entfernt den Remote-Zweig (beachten Sie das ':') und

git branch -d branch_name

entfernt Ihre lokale Kasse.

( Referenz )

Garrett Hyde
quelle
146
Sie können auch 'git remote prune origin' ausführen, um Ihre Remote-Referenzen zu bereinigen.
cmcginty
3
Dadurch werden alle Zweige entfernt, die vom Remote-Repository nicht mehr verfolgt werden. Also sei einfach vorsichtig.
Garrett Hyde
4
Ich denke, es ist auch nützlich zu wissen, dass Sie, obwohl etwas ausführlicher, auch git push <remote> --delete <branchname>entfernte Zweige löschen können .
AeroCross
Dies funktioniert normalerweise, aber ich bin heute auf eine Situation gestoßen, in der die Remote-Liste nicht aktualisiert wurde, und habe versucht, einen Zweig zu löschen, der nicht vorhanden war. Daher war zuerst die unten stehende Lösung von @Flo erforderlich.
dgo
284

Wenn Zweige im Remote-Repository gelöscht wurden und Sie alle lokalen Remote-Tracking-Zweige gleichzeitig aktualisieren möchten, können Sie verwenden

$ git remote prune <remotename>

Löschen aller veralteten Fernverfolgungszweige für eine bestimmte Fernbedienung (dh derjenigen, die Zweigen folgen, die im Fernrepository entfernt wurden).

Siehe git remoteDokumentation.

Jakub Narębski
quelle
Vielen Dank an @Casey und @Jakub für Ihre Antworten! Wie kommt es, dass die lokal gespeicherten Remote-Verzweigungsinformationen bei der nächsten Verwendung nicht aktualisiert werden git fetch?
JJD
4
@JJD: Weil Sie Ihre Arbeit möglicherweise auf einem Remote-Zweig basieren, der nicht mehr hier ist. Es wurde daher als schlechte Idee angesehen, ohne Aufforderung zu verschwinden. Aus diesem Grund müssen Sie Remote-Tracking-Zweige explizit beschneiden.
Jakub Narębski
Bereinigt "git gc" auch veraltete entfernte Zweige?
James Wald
@ JamesWald: Nein, das tut es nicht. git gcPackt nur Objekte und Refs und löscht dabei nicht referenzierte Objekte (mit einem gewissen Sicherheitsspielraum).
Jakub Narębski
186
git remote update --prune

Sollte die Zweige aller Fernbedienungen aktualisieren, neue hinzufügen und entfernte löschen.

Bearbeiten: Der Befehl zur Remote-Aktualisierung ruft im Wesentlichen die Liste der Zweige auf der Fernbedienung ab. Mit dieser --pruneOption werden Ihre lokalen Fernverfolgungszweige entfernt, die auf Zweige verweisen, die auf der Fernbedienung nicht mehr vorhanden sind .

Flo
quelle
Das hat bei mir funktioniert. Ich musste einen Remote-Zweig entfernen, der aus irgendeinem Grund nicht mit dem üblichen 'git push origin: <branch_name>' entfernt werden konnte
n0denine
Wäre es richtig zu sagen, dass diese Antwort das tut, was Jakub Narębskis Antwort tut und mehr? Das heißt, es beschneidet und es holt Updates?
Frank Tan
14

Auch nützlich, um neue Remote-Zweige zu sehen:

git fetch --all
Aidan Donohoe
quelle
Das hat mir sehr geholfen. Ein Fehler in Visual Studio Git verhindert, dass die neuen Zweige angezeigt werden, die nach dem Klonen erstellt wurden. Dieser Befehl hilft
Venkatesh Muniyandi
nett und einfach, danke, hab ein bronzenes Antwortabzeichen auf dem Haus :)
danday74
2

Sie können die Flags -rund kombinieren -d, um entfernte Zweige zu löschen.

mikerobi
quelle
toller Tipp! In diesem Fall gibt es jedoch mehrere Zweige, die bereits gelöscht wurden. Es gibt sicherlich einen Befehl zum Abrufen dieser Updates
Bain Markev
2

Versuchen Sie diesen Befehl

git gc --prune=now
MarceloCouto
quelle