Wie lösche ich Filialen, die bereits zusammengeführt wurden? Kann ich sie alle auf einmal löschen, anstatt jeden Zweig einzeln zu löschen?
Wie lösche ich alle zusammengeführten Git-Branches?
Nambaa
kuboon
So löschen Sie alle Zweige auf der Remote, die bereits zusammengeführt wurden:
git branch -r --merged | grep -v master | sed 's/origin\//:/' | xargs -n 1 git push origin
In neueren Versionen von Git
git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin
UPDATE (von @oliver; da passt nicht in Kommentar, aber schon genug Antworten): Wenn Sie sich im Zweig ABC befinden, erscheint ABC in den Ergebnissen von git branch -r --merged
da der Zweig nicht angegeben ist, ist der Zweig standardmäßig der aktuelle Zweig, und ein Zweig gilt immer als mit sich selbst zusammengeführt (weil es keine Unterschiede zwischen einem Zweig und sich selbst gibt!).
Geben Sie also entweder den Zweig an:
git branch -r --merged master | grep -v master ...
ODER erster Kassenmeister:
git checkout master | git branch -r --merged | grep -v ...
-
Beste Antwort bei weitem. Nur eine Anmerkung, mein Master-Zweig heißt
dev
also musste ich das ändern– Dorian
13. Februar 2014 um 21:33 Uhr
-
musste ich hinzufügen
| grep origin
nachgrep -v master
um zu verhindern, dass Zweige anderer Remotes zum Ursprung geschoben werden. Es wird dringend empfohlen, die Ausgabe vorher mit zu testengit branch -r --merged | grep -v master | grep origin | sed 's/origin\//:/' | xargs -n 1 echo
– L0LN1NJ4
8. Juni 2015 um 8:06 Uhr
-
Ich habe leicht modifiziert, um auszuschließen
develop
Zweig auch.git branch -r --merged | grep -v master | grep -v develop | sed 's/origin\///' | xargs -n 1 git push --delete origin
. Nun stellte sich heraus, dass dies mein Alias war.– Sarat
15. August 2015 um 12:19 Uhr
-
Was dies zur besten Antwort gemacht hat, die ich gelesen habe, ist die
-r
Argument, das ich nirgendwo sonst erwähnt gesehen habe. Es versteht sich von selbst, dass nur lokale Filialen eine Haushaltsführung wert sind. Aber auch Fernbedienungen sind voller Müll.– Asbjørn Ulsberg
2. November 2015 um 17:49 Uhr
-
Achtung – gerade festgestellt: Dadurch werden offensichtlich Zweige gefunden, auf die gemergt wird aktuellen Zweignicht master, also wenn du dran bist
myFeatureBranch
es wird wischenorigin/myFeatureBranch
. Wahrscheinlich ist es am bestengit checkout master
Erste.– jakub.g
5. Februar 2016 um 14:40 Uhr
-
sollte der erste Befehl nicht lauten:
git branch --merged master
da willst du mal schauen was in master gemergt wurde, derzeit nicht ausgecheckter branch?– Joe Phillips
12. August 2016 um 16:23 Uhr
-
@JoePhilllips Einige Leute haben den Hauptzweig nicht gemeistert, sondern stattdessen
develop
oderdev
und in diesem Fall schlägt der Befehl mit fehlfatal: malformed object name
Es ist besser, einen generischen Befehl zu haben, und Sie sind dafür verantwortlich, ihn auszuführen– gesmohamed
13. August 2016 um 1:14 Uhr
-
@JoePhilllips Der Sinn dieser Antwort besteht darin, Adams Antwort (die Top-Antwort für diese Frage) in einen hilfreichen Git-Alias zu packen. Adams Antwort enthält nicht das, was Sie vorschlagen, und so viele Leute fanden das nützlich, sodass ich geneigt wäre, meine nicht zu ändern. Ich würde empfehlen, die Diskussion über Adams Antwort zu eröffnen, wenn Sie davon überzeugt sind
– real_ate
16. August 2016 um 7:39 Uhr
-
Hinzufügen
-r
zuxargs
verhindert unnötige Fehler (branch name required
), wenn dieser Alias mehrmals ausgeführt wird oder wenn kein Zweig mehr zum Löschen vorhanden ist. Mein Alias sieht so aus:cleanup = "!git branch --merged | grep -v -P '^\\*|master|develop' | xargs -n1 -r git branch -d"
– spezifanta
23. Juni 2017 um 9:14 Uhr
-
Der aktuelle Befehl filtert Master- und Entwicklungszweige nicht heraus
– Andriy F.
2. März 2019 um 9:52 Uhr
Guido Boumann
Sie möchten die ausschließen master
, main
& develop
verzweigt sich von diesen Befehlen.
Lokaler Git klar:
git branch --merged | grep -v '\*\|master\|main\|develop' | xargs -n 1 git branch -d
Remote-Git löschen:
git branch -r --merged | grep -v '\*\|master\|main\|develop' | sed 's/origin\///' | xargs -n 1 git push --delete origin
Synchronisieren Sie die lokale Registrierung von Remote-Branches:
git fetch -p
-
+1 auch für die Remote-Version (aber weniger benötigt, da wir remote –prune haben). Beachten Sie auch, dass diese nicht mit älteren Git-Versionen funktionieren
– malko
11. Juni 2015 um 8:09 Uhr
-
git config --global --add fetch.prune true
beim Abrufen oder Ziehen automatisch zu beschneiden.– T3rm1
18. Dezember 2015 um 14:51 Uhr
-
Wohlgemerkt, Prune ist nicht dasselbe wie Remote Clear. Das Remote-Löschen löscht tatsächlich die Remote-Zweige, die vollständig mit Ihrem aktuellen Zweig zusammengeführt wurden. Prune bereinigt nur Ihre lokale Registrierung von Remote-Branches, die bereits gelöscht wurden.
– Guido Boumann
5. Januar 2017 um 14:07 Uhr
-
Das Wort vollständig ist etwas irreführend, da ein Zweig als zusammengeführt betrachtet wird, wenn er zuvor zusammengeführt wurde, aber nach dem Zusammenführen neue Commits hat, die nicht zusammengeführt wurden.
– Scones
20. Juli 2017 um 9:15 Uhr
-
Um alle Ursprungsfernbedienungen in einem Anruf zu löschen, habe ich Folgendes verwendet:
git branch -r --merged | grep -v '\*\|master\|develop' | grep '^\s*origin/' | sed 's/origin\///' | tr "\n" " " | xargs git push --delete origin
– GPHemsley
3. Oktober 2018 um 13:51 Uhr
mkobit
Dies funktioniert auch, um alle zusammengeführten Branches außer master zu löschen.
git branch --merged | grep -v '^* master$' | grep -v '^ master$' | xargs git branch -d
-
+1 auch für die Remote-Version (aber weniger benötigt, da wir remote –prune haben). Beachten Sie auch, dass diese nicht mit älteren Git-Versionen funktionieren
– malko
11. Juni 2015 um 8:09 Uhr
-
git config --global --add fetch.prune true
beim Abrufen oder Ziehen automatisch zu beschneiden.– T3rm1
18. Dezember 2015 um 14:51 Uhr
-
Wohlgemerkt, Prune ist nicht dasselbe wie Remote Clear. Das Remote-Löschen löscht tatsächlich die Remote-Zweige, die vollständig mit Ihrem aktuellen Zweig zusammengeführt wurden. Prune bereinigt nur Ihre lokale Registrierung von Remote-Branches, die bereits gelöscht wurden.
– Guido Boumann
5. Januar 2017 um 14:07 Uhr
-
Das Wort vollständig ist etwas irreführend, da ein Zweig als zusammengeführt betrachtet wird, wenn er zuvor zusammengeführt wurde, aber nach dem Zusammenführen neue Commits hat, die nicht zusammengeführt wurden.
– Scones
20. Juli 2017 um 9:15 Uhr
-
Um alle Ursprungsfernbedienungen in einem Anruf zu löschen, habe ich Folgendes verwendet:
git branch -r --merged | grep -v '\*\|master\|develop' | grep '^\s*origin/' | sed 's/origin\///' | tr "\n" " " | xargs git push --delete origin
– GPHemsley
3. Oktober 2018 um 13:51 Uhr
JLRishe
Für diejenigen unter Ihnen, die Windows verwenden und PowerShell-Skripts bevorzugen, hier ist eines, das lokale zusammengeführte Zweige löscht:
function Remove-MergedBranches
{
git branch --merged |
ForEach-Object { $_.Trim() } |
Where-Object { $_ -NotMatch "^\*" } |
Where-Object { -not ( $_ -Like "*master" -or $_ -Like "*main" ) } |
ForEach-Object { git branch -d $_ }
}
Oder die Kurzfassung:
git branch --merged | %{$_.trim()} | ?{$_ -notmatch 'dev' -and $_ -notmatch 'master' -and $_ -notmatch 'main'} | %{git branch -d $_.trim()}
-
Aus Neugier kann dies verkürzt werden
git branch --merged | ?{-not ($_ -like "*master")} | %{git branch -d $_.trim()}
– Iain Ballard
8. Oktober 2014 um 8:27 Uhr
-
@IainBallard Sicher, ich hätte Aliase verwenden können. Dies wird nicht empfohlen, wenn Sie die Lesbarkeit maximieren möchten. github.com/darkoperator/PSStyleGuide/blob/master/English.md
– Klas Melbourn
8. Oktober 2014 um 11:36 Uhr
-
sicher. Ich fand Ihre Antwort sehr hilfreich 🙂 Manchmal steht jedoch die lange Powershell-Syntax dem im Wege, was in den Blöcken vor sich geht. Aber in erster Linie habe ich etwas vorgeschlagen, das Sie einmalig kopieren/einfügen oder eingeben können. Danke noch einmal.
– Iain Ballard
8. Oktober 2014 um 11:56 Uhr
-
Hier ist ein Einzeiler für die Windows-Cmd-Shell, die Master und Ihren aktuellen Zweig beibehält:
for /f "usebackq" %B in (``git branch --merged^|findstr /v /c:"* " /c:"master"``) do @git branch -d %B
(Seufz, ersetze doppelte Backquotes durch einzelne, ich bin mir nicht sicher, wie man ein Literal formatiert, das Backquotes enthält.)– Jojo
16. Januar 2017 um 23:37 Uhr
Um etwas genauer zu sein
git branch -D
löscht jeden Zweig, ob er zusammengeführt wurde oder nicht.– PhilT
8. Februar 2017 um 9:48 Uhr
Sie können dies auch direkt von GitHub aus tun, wenn Sie zum Abschnitt „Zweige“ Ihres Repos gehen (z github.com///branches ). Es sollte eine Liste aller Ihrer Zweige mit einem roten Mülleimer-Symbol an der Seite angezeigt werden, das den ausgewählten Zweig löscht. Viel schneller als im Terminal! Wird auch zeigen, wie weit vorne/hinten
master
jeder Zweig ist. Ihr lokaler Client listet jedoch weiterhin die alten Zweige auf, wenn Sie ihn ausführengit branch -a
; verwendengit fetch --prune
um sie zu entfernen (gemäß dieser Antwort).– Benutzer5359531
24. Februar 2017 um 16:13 Uhr
Skript, um dies lokal oder remote zu tun – mit Sicherheitsprüfungen und vorkonfigurierten “sicheren Zweigen”: github.com/fatso83/dotfiles/tree/master/utils/…
git delete-merged --doit origin
odergit delete-merged --doit --local
– Oligofren
27. Juni 2017 um 15:10 Uhr
rm -fr work && git clone http://example.com/work.git
im Laufe der Jahre ist es der einfachste Weg geworden, mit Git aus einer Gurke herauszukommen.– Reaktgular
19. April 2020 um 11:33 Uhr
Neuere Frage Wie kann ich alle Git-Zweige löschen, die über GitHub „Squash and Merge“ waren?, weil „Squash and Merge“ nicht verfügbar war, als diese Frage gestellt wurde.
– koppor
28. März 2021 um 16:22 Uhr