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-Branches, die nicht mehr auf dem Remote existieren.
Also, vielleicht ist git fetch -p
das, wonach Sie suchen?
EDIT: Okay, für diejenigen, die auch 3 Jahre später noch über diese Antwort diskutieren, hier sind einige zusätzliche Informationen, warum ich diese Antwort präsentiert habe...
Zunächst sagt der OP, dass er auch "die lokalen Branches entfernen will, die von diesen Remote-Branches erstellt wurden [die nicht mehr auf dem Remote sind]". Dies ist in git
nicht eindeutig möglich. Hier ist ein Beispiel.
Angenommen, ich habe ein Repo auf einem zentralen Server und es hat zwei Branches namens A
und B
. Wenn ich dieses Repo auf mein lokales System klonen, wird mein Clone lokale Verweise (noch keine tatsächlichen Branches) namens origin/A
und origin/B
haben. 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 Branch in meinem lokalen Repo mit einem anderen Namen als seinem Ursprung zu erstellen, und ich habe auch einen lokalen Branch, der (noch) nicht im Ursprungs-Repo existiert.
Nehmen wir an, ich entferne sowohl die Branches A
als auch B
im Remote-Repo und aktualisiere mein lokales Repo (git fetch
in irgendeiner Form), was dazu führt, dass meine lokalen Verweise origin/A
und origin/B
verschwinden. Jetzt hat mein lokales Repo immer noch drei Branches, A
, Z
und C
. Keiner von ihnen hat einen entsprechenden Branch im Remote-Repo. Zwei von ihnen wurden "von ... Remote-Branches erstellt", aber selbst wenn ich weiß, dass es einmal einen Branch namens B
im Ursprung gab, habe ich keine Möglichkeit zu wissen, dass Z
von B
erstellt wurde, weil es im Prozess umbenannt wurde, wahrscheinlich aus gutem Grund. Also, ohne externen Prozess, der Branch-Ursprungs-Metadaten aufzeichnet, oder einen Menschen, der die Historie kennt, ist es unmöglich zu sagen, auf welche der drei Branches der OP abzielt. Ohne externe Informationen, die git
nicht automatisch für Sie erstellt, ist git fetch -p
so nah wie möglich an dem, was Sie erreichen können, und jeder automatische Versuch, wörtlich das zu tun, was der OP gefragt hat, birgt das Risiko, entweder zu viele Branches 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 Branches von origin/A
erstelle, um drei verschiedene Ansätze für etwas zu testen, und dann origin/A
verschwindet. Jetzt habe ich drei Branches, die offensichtlich nicht namensgleich sein können, aber sie wurden von origin/A
erstellt, und eine wörtliche Interpretation der Frage des OPs würde erfordern, alle drei zu entfernen. Das mag jedoch nicht wünschenswert sein, selbst wenn man einen zuverlässigen Weg finden könnte, sie zuzuordnen...
12 Stimmen
Möglicher Duplikat von Entfernen Sie lokale Branches, die nicht mehr auf dem Remote-Server vorhanden sind
8 Stimmen
Einzeiler, plattformübergreifend, sieht nicht aus, als hätte die Katze auf deiner Tastatur geschlafen:
npx git-removed-branches
(Trockenlauf) odernpx git-removed-branches --prune
(für echt). Sie müssen bereits node.js installiert haben. Siehe Antworten unten für Details.0 Stimmen
Ich denke normalerweise, dass diese Dinge absichtlich und nicht automatisch durchgeführt werden sollten, da Sie sich sonst dazu bringen, etwas zu löschen, das Sie nicht löschen wollten. Daher 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