Mitten in den Informationen, die von git help fetch
präsentiert werden, gibt es dieses kleine Element:
-p, --prune
Entferne nach dem Abrufen alle Remote-Tracking-Branches, die nicht mehr auf dem Remote vorhanden sind.
Vielleicht ist also git fetch -p
das, wonach du suchst?
BEARBEITEN: OK, für diejenigen, die diese Antwort 3 Jahre nach dem Fakt noch diskutieren, hier ein wenig mehr Informationen, warum ich diese Antwort vorgestellt habe...
Zunächst sagt der OP, dass sie auch "diese lokalen Branches entfernen möchten, die von diesen Remote-Branches [die nicht mehr auf dem Remote vorhanden sind] erstellt wurden". 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, genannt A
und B
. Wenn ich dieses Repo auf mein lokales System klonen, wird mein Klon lokale Verzweigungen (noch keine tatsächlichen Branches) namens origin/A
und origin/B
haben. Nun lasst uns annehmen, dass ich folgendes tue:
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 auf dem Ursprungs-Repo existiert.
Nehmen wir nun 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 Verzweigungen origin/A
und origin/B
verschwinden. Nun hat mein lokales Repo immer noch drei Branches, A
, Z
und C
. Keiner von ihnen hat einen entsprechenden Branch im Remote-Repo. Zwei davon wurden "aus ... Remote-Branches erstellt", aber selbst wenn ich weiß, dass es einen Branch namens B
im Ursprungsrepo 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, ohne irgendeinen externen Prozess, der Metadaten des Branch-Ursprungs aufzeichnet, oder einen Menschen, der die Geschichte kennt, ist es unmöglich zu sagen, auf welche der drei Branches, wenn überhaupt, der OP abzielt, um sie zu entfernen. Ohne irgendwelche externen Informationen, die git
nicht automatisch für Sie pflegt, kommt git fetch -p
dem schon ziemlich nahe, und eine automatische Methode, die wörtlich das versucht, was der OP gefragt hat, läuft Gefahr, entweder zu viele Branches zu löschen oder einige zu verpassen, die der OP sonst gelöscht haben möchte.
Es gibt auch andere Szenarien, wie 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 so würde eine wörtliche Interpretation der Frage des OPs erfordern, alle drei zu entfernen. Das mag jedoch nicht wünschenswert sein, selbst wenn man einen zuverlässigen Weg finden könnte, sie zuordnen...
12 Stimmen
Möglicher Duplikat von Entfernen Sie lokale Branches, die nicht mehr auf Remote vorhanden sind
8 Stimmen
Eine Zeile, plattformübergreifend, sieht nicht aus, als ob die Katze auf deiner Tastatur geschlafen hätte:
npx git-removed-branches
(trocken laufen) 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 solche Dinge bewusst und nicht automatisch gemacht werden sollten, da man sich sonst versehentlich etwas löschen könnte, das man nicht löschen wollte. 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