622 Stimmen

Alle lokalen Git-Zweige löschen

Ich folge einem Entwicklungsprozess, bei dem ich für jede neue Funktion oder Storycard einen neuen lokalen Zweig erstelle. Wenn ich fertig bin, führe ich den Zweig mit Master zusammen und veröffentliche ihn dann.

Was im Laufe der Zeit durch eine Kombination aus Faulheit und Vergesslichkeit passiert, ist, dass ich am Ende eine große Liste lokaler Zweige habe, von denen einige (wie z.B. Spikes) vielleicht noch nicht zusammengeführt wurden.

Ich weiß, wie ich alle meine lokalen Zweige auflisten kann und ich weiß, wie ich einen einzelnen Zweig entfernen kann, aber ich habe mich gefragt, ob es einen Git-Befehl gibt, mit dem ich alle meine lokalen Zweige löschen kann?

Nachfolgend ist die Ausgabe des git branch --merged Befehl.

user@machine:~/projects/application[master]$ git branch --merged
  STORY-123-Short-Description
  STORY-456-Another-Description
  STORY-789-Blah-Blah
* master

Alle Versuche, Zweige zu löschen, die mit grep -v \* (gemäß den nachstehenden Antworten) führen zu Fehlern:

error: branch 'STORY-123-Short-Description' not found.
error: branch 'STORY-456-Another-Description' not found.
error: branch 'STORY-789-Blah-Blah' not found.

Ich benutze:

git 1.7.4.1  
ubuntu 10.04  
GNU bash, version 4.1.5(1)-release  
GNU grep 2.5.4

2voto

Ron Newcomb Punkte 2505

Ich habe kein grep oder ein anderes Unix-Programm auf meinem Rechner, aber es funktionierte über das Terminal von VSCode:

git branch -d $(git branch).trim()

Ich verwende das kleine d, damit keine nicht zusammenhängenden Zweige gelöscht werden.

Ich war auch auf dem Master, als ich es gemacht habe, also * master existiert nicht, also wurde nicht versucht, den Master zu löschen.

2voto

ScottyBlades Punkte 9468

Ich empfehle eine moderatere Antwort. Viele der Antworten hier verwenden -D die unabhängig davon, ob Änderungen zusammengeführt wurden oder nicht, zwangsweise gelöscht wird. Hier ist ein Einzeiler, der die Zweige mit nicht zusammengeführten Änderungen unberührt lässt.

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d

Sie können auch die anderen aufgeführten Beispiele ausprobieren, aber ändern Sie einfach die -D a -d . Ich weiß, dass der OP fragte, wie zu löschen, aber in den meisten Anwendungsfällen ist es sicherer, zu verwenden -d .

2voto

Lucas Punkte 12757

Für Powershell funktioniert dies:

git branch --format '%(refname:lstrip=2)' --merged `
    | Where-Object { $_ -ne 'master' } `
    | ForEach-Object { git branch -d $_ }

2voto

siliconrockstar Punkte 3298
git branch | grep release-1.4 | xargs -n 1 -I % sh -c 'git branch -D %'

Eine einfache Möglichkeit, alle Zweige mit einem Namen zu löschen, der dem Muster 'release-1.4*' entspricht. Ich verwende es auch regelmäßig mit Ticket-Präfixen, um alle meine lokalen Arbeitszweige zu löschen, aber die Pipeline-Zweige unbehelligt zu lassen.

1voto

Andriy Orehov Punkte 51

Zu diesem Zweck können Sie Folgendes verwenden git-extras

$ git delete-merged-branches
Deleted feature/themes (was c029ab3).
Deleted feature/live_preview (was a81b002).
Deleted feature/dashboard (was 923befa).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X