2016-06-06 14 views
15

An einem Punkt dachte ich, dass git fetch origin --prune lokalen Niederlassungen gelöscht, die nicht mehr auf dem Server vorhanden waren. Irgendwie ist das im Moment nicht meine Erfahrung.git fetch Herkunft --prune löscht lokale Zweige nicht?

Ich habe diesen Befehl ausgeführt, und der lokale Zweig wurde nicht gelöscht. Es ist nicht derzeit ausgecheckt. Ich lief git branch -vv diese Informationen zu überprüfen, und ich sehe

feature/MyGreatFeature   f30efc7 [origin/feature/MyGreatFeature: gone] 

So scheint es, zu wissen, dass es weg ist. Warum lösche ich meine lokale Niederlassung nicht?

Lauf git version 2.7.4 (Apple Git-66)

Antwort

14

Die verschiedenen Optionen Prune (git remote update --prune, git remote prune, git fetch --prune) nur löschen Fernverfolgung Zweige.

Sie müssen lokale Zweigstellen, die Sie nicht mehr benötigen, manuell löschen oder ihre Upstream-Einstellungen ändern oder entfernen, wenn der Remote-Tracking-Zweig nicht mehr vorhanden ist. Beachten Sie, dass jede lokale Verzweigung eine Remote und/oder Zweigstelle aufzeichnen kann, die nicht jetzt oder nie existiert. In diesem Fall verhält sich Git meistens so, als ob diese lokalen Zweige keine Upstream-Menge hätten, außer dass seit Version 1.8.5 mehrere Befehle den Upstream als "weg" oder anderweitig ungültig melden und möglicherweise die Verwendung von --unset-upstream vorschlagen.


Genauer gesagt, löschen sie Ziel Refs nach dem Refspec Mapping von der Kommandozeile oder fetch Linien aus der Konfiguration zu tun. Daher können sie zum Abrufen von Spiegeln lokale Zweige löschen. Die meisten Klone sind jedoch nicht als Abrufspiegel konfiguriert.

Es gab einige kürzlich behobene Fehlerkorrekturen für komplexe Zuordnungen, um sicherzustellen, dass Git eine zugeordnete Verzweigung in einigen Fällen nicht abgeschnitten hat, wenn dies nicht der Fall war. Für jedes normale Repository - gewöhnlicher Klon oder reiner Abrufspiegel - haben diese Fixes keine Wirkung; Sie sind nur wichtig, wenn Sie fetch Konfigurationen kompliziert haben.

+0

Wenn es eine Verzweigung gibt, die in '' '' '' 'git branch -vv aufgeführt ist, handelt es sich in diesem Fall nicht um eine Remote-Tracking-Verzweigung? – yano

+0

Nicht unbedingt: Das Ding in '[...]' ist einfach der Upstream. Wenn der Upstream ein Remote-Tracking-Zweig ist, ist es wahrscheinlich, dass er abgeschnitten wird. In Ihrem Beispiel haben Sie '[origin/feature/MyGreatFeature: gone]', das aussieht wie ein Remote-Tracking-Zweig, der bereits bereinigt wurde. Git hat immer noch den lokalen Zweig 'feature/MyGreatFeature' und in'.git/config', dieser Zweig wird immer noch auf 'Herkunft' und seine Upstream-Gruppe gesetzt. Sie können z. B. den lokalen Zweig (der seine Verfolgungsinformationen löscht) oder "--unset-upstream" darauf löschen, wenn Sie den lokalen Zweig ohne Upstream-Satz beibehalten möchten. – torek

+0

das ist bedauerlich, aber scheint eine genaue Antwort zu sein – yano

5

Der Befehl Sie wollen, ist

$ git remote prune origin 

This question fast wörtlich ist das, was Sie suchen.

+0

Für mehr Git Verzweigung/Verschmelzung Wahnsinn, [diese Frage aus] (http://stackoverflow.com/questions/13064613/how-to-prune-local-tracking-branches-that-do-not-exist- on-remote-mehr). –

+2

das funktioniert aus irgendeinem Grund nicht – yano

+0

Wenn Sie sagen "nicht funktioniert", was meinst du? Es versagt mit einem Fehler? Ist der Befehl erfolgreich, hat aber nicht den gewünschten Effekt? –

Verwandte Themen