So löschen Sie Zweige, deren Name einem bestimmten Muster entspricht

Lesezeit: 4 Minuten

Benutzeravatar von Nirmalya Ghosh
Nirmalya Ghosh

Wie kann ich Zweige in Git löschen, die mit dem Buchstaben ‘o’ beginnen?

Angenommen, ich habe eine Liste von Zweigen wie die folgende:

origin_alpha
origin_beta
origin_gamma
alpha
beta
gamma

Ich möchte die Zweige löschen origin_alpha, origin_beta und origin_gamma.

  • Mögliches Duplikat von Können Sie mit Git mehrere Branches in einem Befehl löschen?

    – cmbuckley

    10. November 2015 um 13:42 Uhr

  • Mir ist keine Einschränkung bekannt, die Sie daran hindert, diese Zweige wie jeden anderen Zweig zu löschen: git branch -d origin_alpha

    – kvdv

    10. November 2015 um 13:42 Uhr


  • @kvdv Danke für deine Antwort. Angenommen, ich habe 50 Zweige, die mit dem Buchstaben „o“ beginnen, dann ist es nicht bequem, alle diese Zweige manuell zu löschen. Daher die Frage.

    – Nirmalya Ghosh

    10. November 2015 um 13:46 Uhr

  • @cmbuckley Danke für deine Antwort. Ich wollte nur die Zweige löschen, die mit einem bestimmten Buchstaben beginnen. Meine Frage unterscheidet sich also von der von Ihnen genannten.

    – Nirmalya Ghosh

    10. November 2015 um 13:47 Uhr

  • @NirmalyaGhosh nein, es ist dasselbe, aber das Match ist o* anstatt 3.2*. Siehe Antwort stackoverflow.com/a/28614187/283078.

    – cmbuckley

    10. November 2015 um 13:49 Uhr

Benutzeravatar von hek2mgl
hek2mgl

Update: Die -r Option zu xargs ist ein GNU-Addon. Es sei denn, Sie verwenden xargs von GNU findutils funktioniert es möglicherweise nicht. Sie können es weglassen, aber das führt zu einem Fehler, wenn die an xargs geleitete Eingabe leer ist.


Sie können verwenden git branch --list <pattern> und leiten Sie die Ausgabe an xargs git branch -d:

git branch --list 'o*' | xargs -r git branch -d

Übrigens gibt es ein kleines Problem mit dem obigen Code. Wenn Sie gerade eine der Filialen ausgecheckt haben, die mit beginnt o die Ausgabe von git branch --list 'o*' würde so aussehen:

* origin_master
origin_test
o_what_a_branch

Beachten Sie das Sternchen * vor dem aktuellen Filialnamen.

Den aktuellen Zweig kann man zwar ohnehin nicht löschen, aber das führt dazu, dass xargs auch durchgeht * zu git branch delete.

Wie ich schon sagte, es ist nur ein kosmetischer Fehler, aber wenn Sie es vermeiden wollen, verwenden Sie:

git branch --list 'o*' | sed 's/^* //' | xargs -r git branch -d

  • Dies funktioniert nicht, wenn Sie sich in einem dieser Zweige befinden, da Ihre Ausgabe das hervorhebende Sternchen enthält. Siehe Antwort stackoverflow.com/a/3670560/283078.

    – cmbuckley

    10. November 2015 um 13:51 Uhr


  • Auf Master umgestellt und diesen Code angewendet. Mein Problem gelöst. Vielen Dank.

    – Nirmalya Ghosh

    10. November 2015 um 13:51 Uhr

  • @cmbuckley git branch -d <branch> würde auch nicht funktionieren, wenn Sie in diesem Zweig sind. 😉 Deshalb habe ich das ignoriert.

    – hek2mgl

    10. November 2015 um 13:53 Uhr


  • Gerade auf einem Mac ausprobiert: xargs akzeptiert nicht -r (illegal option -- r), aber es funktionierte ohne es für den gewünschten Zweck.

    – Amy Pellegrini

    22. August 2018 um 10:55 Uhr


  • FYI Die einfachen Anführungszeichen töten es gerade für mich unter Windows git branch --list 'hotfix' zeigt aber nichts git branch --list "hotfix" macht den Trick

    – PandaWood

    6. Oktober 2020 um 23:49 Uhr

Benutzeravatar von lzzluca
lzzluca

Ein anderer Weg könnte dieser sein:

git branch -d $(git branch | grep yourSearchPattern)

sieht für mich intuitiver aus, weil grep etwas ist, das ich täglich verwende.

Sie könnten auch einen Alias ​​​​aus ihm machen (oder auch aus jeder hier vorgeschlagenen Lösung), überprüfen Sie zum Beispiel hier, wie man Argumente an einen Alias ​​​​übergibt:
http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/

PS In Ihrem speziellen Fall könnte yourSearchPattern der Ursprung sein:

git branch -d $(git branch | grep origin)

PPS als nächster Schritt, wäre auch schön, um den Löschvorgang ausführlicher zu gestalten, wäre zum Beispiel schön, dass man das Löschen für jeden Zweig bestätigen muss. Aber ich denke damit ist die Frage erledigt…

  • Ich bin gerade unter Windows und obwohl ich den vollständigen Unix-Befehlssatz habe, wie grep, ist Ihr Vorschlag hier zB git branch -d $(git branch | grep hotfix) scheitert mit error: branch '$(git' not found

    – PandaWood

    23. Juli 2018 um 0:27 Uhr


  • Auf den ersten Blick: ist $() wird von Win richtig erkannt? scheint, dass Git versucht, den Zweig zu entfernen $(git anstatt es durch die Befehlsausgabe zu ersetzen

    – lzzluca

    24. Juli 2018 um 12:05 Uhr

  • Es wäre großartig, die Ausarbeitung darüber zu sehen, was die erste Codezeile nach “-d” tut.

    – Eduard

    30. Juli 2018 um 12:10 Uhr

Benutzeravatar von Austin pb
Austin pb

git branch -D $(git branch --list 'regex_here')

Beispiel: \
git branch -D $(git branch --list 'aputhen/*')

Löscht alle Zweige, deren Name mit beginnt aputhen/.

Hinzufügen des Skripts, das ich in PowerShell verwende (Windows)

Foreach ($branch in (git branch --list | findstr user)) { git branch -D $branch.trim() }

Zu spät zur Party, aber eine andere Möglichkeit, dies zu tun, ist

git branch -d `git branch | grep substring`

und zur aktuellen Frage

git branch -d `git branch | grep origin`

Dadurch werden alle Branches gelöscht, deren Namen origin enthalten.

1440870cookie-checkSo löschen Sie Zweige, deren Name einem bestimmten Muster entspricht

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

Privacy policy