Wenn ich dies tue git fetch origin
und 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?
Wenn ich dies tue git fetch origin
und 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?
Antworten:
Sie müssen Folgendes tun
git fetch -p
Dadurch wird die lokale Datenbank der Remote-Zweige aktualisiert.
origin
: git fetch -p origin
Als ich das tat, wurde git branch -r
der nicht vorhandene Remote-Zweig nicht mehr angezeigt.
git remote prune origin
und ähnlich wie git pull --prune
bei erwähnten stackoverflow.com/a/6127884/94687 und stackoverflow.com/a/17983126/94687 sind.
[deleted] (none) -> origin/ < branch name >
und die Filiale wird immer noch auf dem lokalen Repo angezeigt. Irgendeine Idee warum?
git branch
weiterhin die Zweige angezeigt, die angeblich gelöscht wurden.
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 -p
tatsächlich "beschneiden".
In beiden Fällen werden die nicht vorhandenen Remote-Zweige aus Ihrem lokalen Repository gelöscht.
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--tags
Option 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--mirror
Option geklont wurde ), werden sie ebenfalls beschnitten.
Ich persönlich benutze git fetch origin -p --progress
es gerne, weil es eine Fortschrittsanzeige zeigt.
In Bezug git fetch -p
auf 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 erfolgtDies 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.