Wie lösche ich alle zusammengeführten Git-Branches?

Lesezeit: 7 Minuten

Benutzer-Avatar
Nambaa

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?

  • 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ühren git branch -a; verwenden git 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 oder git 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

Benutzer-Avatar
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 nach grep -v master um zu verhindern, dass Zweige anderer Remotes zum Ursprung geschoben werden. Es wird dringend empfohlen, die Ausgabe vorher mit zu testen git 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 wischen origin/myFeatureBranch. Wahrscheinlich ist es am besten git 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 oder dev und in diesem Fall schlägt der Befehl mit fehl fatal: 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 zu xargs 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

Benutzer-Avatar
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

Benutzer-Avatar
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

Benutzer-Avatar
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


1330330cookie-checkWie lösche ich alle zusammengeführten Git-Branches?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy