Inmitten der Informationen, die von git help fetch
gibt es diesen kleinen Punkt:
-p, --prune
After fetching, remove any remote-tracking branches which no longer exist on the remote.
Also, vielleicht, git fetch -p
ist das, wonach Sie suchen?
EDIT: Ok, für diejenigen, die 3 Jahre später immer noch über diese Antwort debattieren, hier ein paar weitere Informationen, warum ich diese Antwort gegeben habe...
Erstens sagt der Auftraggeber, er wolle "auch die lokalen Zweige entfernen, die aus den entfernten Zweigen erstellt wurden [die sich nicht mehr auf dem entfernten Rechner befinden]". Dies ist nicht eindeutig möglich in git
. Hier ist ein Beispiel.
Nehmen wir an, ich habe ein Repo auf einem zentralen Server, und es hat zwei Zweige, genannt A
y B
. Wenn ich dieses Projektarchiv auf mein lokales System klone, hat mein Klon lokale Referenzen (noch keine tatsächlichen Zweige) mit dem Namen origin/A
y origin/B
. Nehmen wir an, ich tue Folgendes:
git checkout -b A origin/A
git checkout -b Z origin/B
git checkout -b C <some hash>
Die relevanten Fakten hier sind, dass ich aus irgendeinem Grund einen Zweig auf meinem lokalen Repository erstellt habe, der einen anderen Namen als sein Ursprung hat, und ich habe auch einen lokalen Zweig, der (noch) nicht auf dem ursprünglichen Repository existiert.
Nehmen wir nun an, ich entferne sowohl die A
y B
Zweige auf dem entfernten Repo und aktualisieren mein lokales Repo ( git fetch
in irgendeiner Form), was dazu führt, dass meine lokalen Refs origin/A
y origin/B
zu verschwinden. Jetzt hat mein lokales Repo noch drei Zweige, A
, Z
y C
. Keiner dieser Zweige hat einen entsprechenden Zweig auf dem entfernten Repository. Zwei von ihnen wurden "von ... entfernten Zweigen erstellt", aber selbst wenn ich weiß, dass es früher einen Zweig namens B
über den Ursprung, kann ich nicht wissen, dass Z
wurde erstellt aus B
Denn sie wurde im Laufe des Prozesses umbenannt, wahrscheinlich aus einem guten Grund. Ohne einen externen Prozess, der die Metadaten des Zweigursprungs aufzeichnet, oder einen Menschen, der die Historie kennt, ist es also unmöglich zu sagen, welcher der drei Zweige, wenn überhaupt, vom OP zur Entfernung vorgesehen ist. Ohne einige externe Informationen, die git
nicht automatisch für Sie pflegen, git fetch -p
ist so nahe dran wie möglich, und jede automatische Methode, die buchstäblich versucht, das zu tun, worum der Auftraggeber gebeten hat, birgt das Risiko, entweder zu viele Zweige zu löschen oder einige zu übersehen, die der Auftraggeber eigentlich löschen wollte.
Es gibt auch noch andere Szenarien, z. B. wenn ich drei separate Zweige von origin/A
drei verschiedene Ansätze für eine Sache zu testen und dann origin/A
geht weg. Jetzt habe ich drei Zweige, die offensichtlich nicht alle vom Namen her übereinstimmen können, aber sie wurden erstellt aus origin/A
und daher würde eine wörtliche Auslegung der Frage des Auftraggebers erfordern, alle drei zu entfernen. Das ist jedoch möglicherweise nicht wünschenswert, wenn man überhaupt einen zuverlässigen Weg finden könnte, sie abzugleichen...