Mitten in den Informationen, die von git help fetch
präsentiert werden, gibt es dieses kleine Element:
-p, --prune
Nach dem Abrufen, entfernen Sie alle Remote-Tracking-Zweige, die nicht mehr auf dem Remote vorhanden sind.
Also vielleicht ist git fetch -p
das, wonach Sie suchen?
BEARBEITEN: Ok, für diejenigen, die diese Antwort immer noch 3 Jahre nach dem Fakt debattieren, hier sind ein paar weitere Informationen, warum ich diese Antwort präsentiert habe...
Zuerst sagt der OP, dass sie "auch die lokalen Zweige entfernen wollen, die von diesen Remote-Zweigen erstellt wurden [die nicht mehr auf dem Remote vorhanden sind]". Dies ist in git
nicht eindeutig möglich. Hier ist ein Beispiel.
Angenommen, ich habe ein Repository auf einem zentralen Server und es hat zwei Zweige, die A
und B
genannt werden. Wenn ich dieses Repository auf mein lokales System klonen, wird mein Klon lokale Verweise haben (noch keine tatsächlichen Zweige) namens origin/A
und origin/B
. Angenommen, ich mache folgendes:
git checkout -b A origin/A
git checkout -b Z origin/B
git checkout -b C
Die relevanten Fakten hier sind, dass ich aus irgendeinem Grund beschlossen habe, einen Zweig in meinem lokalen Repository zu erstellen, der einen anderen Namen als das Ursprungs hat, und dass ich auch eine lokale Zweig habe, die (noch) nicht im Ursprungs-Repository existiert.
Angenommen, ich entferne sowohl die Zweige A
als auch B
im Remote-Repository und aktualisiere mein lokales Repository (git fetch
irgendeiner Form), was dazu führt, dass meine lokalen Verweise origin/A
und origin/B
verschwinden. Jetzt habe mein lokales Repository drei Zweige, A
, Z
und C
. Keiner von ihnen hat einen entsprechenden Zweig im Remote-Repository. Zwei davon wurden „aus ... Remote-Zweigen erstellt“, aber selbst wenn ich weiß, dass es einen Zweig namens B
im Ursprung gab, habe ich keine Möglichkeit zu wissen, dass Z
aus B
erstellt wurde, weil es im Prozess umbenannt wurde, wahrscheinlich aus gutem Grund. Also, wirklich, ohne irgendetwas externes, das Branch-Origin-Metadaten aufzeichnet, oder einen Menschen, der die Geschichte kennt, ist es unmöglich zu sagen, auf welchen der drei Zweige der OP abzielt, und ob überhaupt. Ohne einige externe Informationen, die git
nicht automatisch für Sie pflegt, kommt git fetch -p
so nah wie möglich ran, und jede automatische Methode, die buchstäblich versucht, was der OP gefragt hat, es birgt das Risiko, entweder zu viele Zweige zu löschen oder einige zu übersehen, die der OP sonst löschen möchte.
Es gibt auch andere Szenarien, zum Beispiel, wenn ich drei separate Zweige von origin/A
erstelle, um drei verschiedene Ansätze für etwas zu testen, und dann origin/A
verschwindet. Jetzt habe ich drei Zweige, die offensichtlich nicht namensgleich sein können, aber sie wurden von origin/A
erstellt, und daher würde eine wörtliche Interpretation der Frage des OPs erfordern, alle drei zu entfernen. Das mag jedoch nicht wünschenswert sein, wenn man überhaupt einen zuverlässigen Weg finden könnte, um sie abzugleichen...
12 Stimmen
Möglicher Duplikat von Lokale Branches entfernen, die nicht mehr auf Remote vorhanden sind
8 Stimmen
Einzeiler, plattformübergreifend, sieht nicht aus, als hätte die Katze auf Ihrer Tastatur geschlafen:
npx git-removed-branches
(Trockenlauf) odernpx git-removed-branches --prune
(für echt). Du musst bereits Node.js installiert haben. Siehe Antworten unten für Details.0 Stimmen
Ich denke normalerweise, dass diese Dinge absichtlich und nicht automatisch gemacht werden sollten, da Sie sich ansonsten selbst dem Risiko aussetzen, etwas zu löschen, das Sie nicht löschen wollten. Also würde ich bei git branch -d localBranchName und git push origin --delete remoteBranchName bleiben.
3 Stimmen
Für IntelliJ-Benutzer tut das folgende Plugin genau das, was Sie brauchen: plugins.jetbrains.com/plugin/10059-git-branch-cleaner