Inmitten der Informationen 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 diese Antwort 3 Jahre später noch diskutieren, hier ein paar weitere Informationen darüber, warum ich diese Antwort präsentiert habe ...
Erstens sagt das OP, dass sie "auch die lokalen Zweige entfernen möchten, die aus diesen entfernten Zweigen [die sich nicht mehr auf der entfernten befinden] erstellt wurden". Dies ist in nicht eindeutig möglich git
. Hier ist ein Beispiel.
Angenommen, ich habe ein Repo auf einem zentralen Server und es hat zwei Zweige, genannt A
und B
. Wenn ich dieses Repo auf mein lokales System klone, werden auf meinem Klon lokale Refs (noch keine tatsächlichen Zweige) aufgerufen origin/A
und origin/B
. Nehmen wir jetzt an, ich mache 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 mich aus irgendeinem Grund dafür entschieden habe, einen Zweig in meinem lokalen Repo zu erstellen, der einen anderen Namen als seinen Ursprung hat, und ich habe auch einen lokalen Zweig, der (noch) nicht im Ursprungs-Repo existiert.
Lassen Sie uns jetzt sagen , dass ich beide entfernen das A
und B
Zweige auf dem Remote - Repo und aktualisieren meine lokalen Repo ( git fetch
in irgendeiner Form), die meine lokalen Refs verursacht origin/A
und origin/B
verschwinden. Nun, meine lokale Repo hat drei Zweige noch, A
, Z
, und C
. Keiner von diesen hat einen entsprechenden Zweig auf dem Remote-Repo. Zwei von ihnen wurden "aus ... entfernten Zweigen erstellt", aber selbst wenn ich weiß, dass es früher einen Zweig gab, der B
nach dem Ursprung aufgerufen wurde , kann ich nicht wissen, dass Z
dieser Zweig erstellt wurdeB
, weil es dabei wahrscheinlich aus gutem Grund umbenannt wurde. Ohne externe Metadaten zur Erfassung von Zweigursprüngen oder einen Menschen, der die Historie kennt, ist es unmöglich zu sagen, auf welchen der drei Zweige das OP gegebenenfalls abzielt. Ohne einige externe Informationen, git
die nicht automatisch für Sie gepflegt werden, git fetch -p
ist sie so nah wie möglich, und jede automatische Methode, um buchstäblich zu versuchen, was das OP verlangt, läuft Gefahr, entweder zu viele Zweige zu löschen oder einige zu verpassen, die das OP sonst hätte gelöscht werden wollen.
Es gibt auch andere Szenarien, z. B. wenn ich drei separate Zweige erstelle origin/A
, um drei verschiedene Ansätze für etwas zu testen, und dann origin/A
verschwindet. Jetzt habe ich drei Zweige, die offensichtlich nicht alle namentlich übereinstimmen können, aber aus denen sie erstellt origin/A
wurden. Eine wörtliche Interpretation der OP-Frage würde daher das Entfernen aller drei Zweige erfordern. Dies ist jedoch möglicherweise nicht wünschenswert, wenn Sie sogar einen zuverlässigen Weg finden könnten, um sie anzupassen ...