Abruf vom Ursprung mit gelöschten entfernten Zweigen?

440

Wenn ich dies tue git fetch originund origin einen gelöschten Zweig hat, scheint er ihn in meinem Repository nicht zu aktualisieren. Wenn ich es tue git branch -r, zeigt es immer noch origin/DELETED_BRANCH.

Wie kann ich das beheben?

Chris Muench
quelle
4
Mögliches Duplikat von git remote branch gelöscht, erscheint aber immer noch in 'branch -a'
imz - Ivan Zakharyaschev

Antworten:

810

Sie müssen Folgendes tun

git fetch -p

Dadurch wird die lokale Datenbank der Remote-Zweige aktualisiert.

Pavan Yalamanchili
quelle
1
vielen Dank. Ich habe diese Zweige zuvor manuell gelöscht.
Maksim Dmitriev
4
Aus irgendeinem Grund funktionierte Ihr Befehl nicht, aber dieser Befehl funktionierte für einen nicht vorhandenen Remote-Zweig in meiner Verzweigung origin: git fetch -p origin Als ich das tat, wurde git branch -r der nicht vorhandene Remote-Zweig nicht mehr angezeigt.
oldfartdeveloper
11
Der Vollständigkeit halber: es muss gleich sein git remote prune originund ähnlich wie git pull --prunebei erwähnten stackoverflow.com/a/6127884/94687 und stackoverflow.com/a/17983126/94687 sind.
imz - Ivan Zakharyaschev
6
Jungs, wenn ich das mache, heißt es [deleted] (none) -> origin/ < branch name >und die Filiale wird immer noch auf dem lokalen Repo angezeigt. Irgendeine Idee warum?
Buddhi741
4
Ich erhalte die Meldung, dass meine Zweige gelöscht wurden, aber beim Ausführen werden git branchweiterhin die Zweige angezeigt, die angeblich gelöscht wurden.
SDFSDF
91

Von http://www.gitguys.com/topics/adding-and-removing-remote-branches/

Nachdem jemand einen Zweig aus einem Remote-Repository gelöscht hat, löscht git die lokalen Repository-Zweige nicht automatisch, wenn ein Benutzer einen Git-Pull oder einen Git-Abruf durchführt. Wenn der Benutzer jedoch möchte, dass alle Tracking-Zweige aus seinem lokalen Repository entfernt werden, die in einem Remote-Repository gelöscht wurden, kann er Folgendes eingeben:

Git Remote Prune Ursprung

Als Hinweis bedeutet der Parameter -p von git fetch -ptatsächlich "beschneiden".
In beiden Fällen werden die nicht vorhandenen Remote-Zweige aus Ihrem lokalen Repository gelöscht.


quelle
Ich mag das, da es nichts Neues bringt.
Marek R
30

Sie müssen Folgendes tun

git fetch -p

um Ihre Filialliste zu synchronisieren. Das Git-Handbuch sagt

-p, --prune
Entfernen , nachdem das Abrufen, keine Fernverfolgung Referenzen die nicht mehr existiert auf der Fernbedienung. Tags unterliegen nicht dem Bereinigen, wenn sie nur aufgrund der automatischen Standardverfolgung von Tags oder aufgrund einer --tagsOption abgerufen werden . Wenn Tags jedoch aufgrund einer expliziten Referenzspezifikation abgerufen werden (entweder in der Befehlszeile oder in der Remote-Konfiguration, z. B. wenn die Remote mit der --mirrorOption geklont wurde ), werden sie ebenfalls beschnitten.

Ich persönlich benutze git fetch origin -p --progresses gerne, weil es eine Fortschrittsanzeige zeigt.

naXa
quelle
11

Das hat bei mir funktioniert.

git remote update --prune
Antstud
quelle
6

In Bezug git fetch -pauf Git 1.9 hat sich sein Verhalten geändert, und nur Git 2.9.x / 2.10 spiegelt dies wider.

Siehe Commit 9e70233 (13. Juni 2016) von Jeff King ( peff) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 1c22105 , 06. Juli 2016)

fetch: Dokumentieren Sie, dass das Beschneiden vor dem Abrufen erfolgt

Dies wurde in 10a6cc8 geändert ( fetch --prune: Prune vor dem Abrufen ausführen, 2014-01-02), aber es scheint, dass niemand in dieser Diskussion realisiert hat, dass wir das "Nachher" explizit bewerben.

In der Dokumentation heißt es nun:

Entfernen Sie vor dem Abrufen alle Fernverfolgungsreferenzen, die auf der Fernbedienung nicht mehr vorhanden sind

Das ist, weil:

Wenn wir einen Remote-Tracking-Zweig mit dem Namen " frotz/nitfol" aus einem vorherigen Abruf haben und der Upstream jetzt einen Zweig mit dem Namen " frotz" hat, kann der Abruf " frotz/nitfol" nicht mit einem " git fetch --prune" aus dem Upstream entfernen . git würde den Benutzer informieren, " git remote prune" zu verwenden, um das Problem zu beheben.

Ändern Sie die Funktionsweise von " fetch --prune", indem Sie den Bereinigungsvorgang vor dem Abrufvorgang verschieben. Auf diese Weise wird der Benutzer nicht vor einem Konflikt gewarnt, sondern automatisch behoben.

VonC
quelle