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

0voto

Deepak G Punkte 581

Die obigen Antworten funktionieren gut. Hier ist ein anderer Ansatz, wenn wir viele Zweige im lokalen Repository haben und wir viele Zweige löschen müssen, außer einigen, die auf dem lokalen Rechner liegen.

Erste git branch listet alle örtlichen Zweigstellen auf.

Um die Spalte mit den Zweignamen in eine einzelne Zeile in der Datei zu übertragen, führen Sie einen Unix-Befehl aus
git branch > sample.txt
Dies speichert sie in beispiel.txt Akte. Und führen Sie
awk 'BEGIN { ORS = " " } { print }' sample.txt
Befehl in der Shell. Dadurch wird die Spalte in eine Zeile umgewandelt und die Liste der Zweignamen in eine einzelne Zeile kopiert.

Und dann laufen
git branch -D branch_name(s) .
Dies löscht alle aufgelisteten Zweige, die im lokalen

0voto

nhp Punkte 3730

Ich habe ein Shell-Skript geschrieben, um alle lokalen Zweige zu entfernen, außer develop

branches=$(git branch | tr -d " *")
output=""
for branch in $branches 
do
  if [[ $branch != "develop" ]]; then
    output="$output $branch"
  fi
done
git branch -d $output

0voto

dherman Punkte 425

Das folgende Skript löscht Zweige. Verwenden und verändern Sie es auf eigene Gefahr usw. usw.

Aufgrund der anderen Antworten auf diese Frage habe ich ein schnelles Bash-Skript für mich geschrieben. Ich nannte es "gitbd" (git branch -D), aber wenn Sie es verwenden, können Sie es in einen Namen Ihrer Wahl umbenennen.

gitbd() {
if [ $# -le 1 ]
  then
    local branches_to_delete=`git for-each-ref --format '%(refname:short)' refs/heads/ | grep "$1"`
    printf "Matching branches:\n\n$branches_to_delete\n\nDelete? [Y/n] "
    read -n 1 -r # Immediately continue after getting 1 keypress
    echo # Move to a new line
    if [[ ! $REPLY == 'N' && ! $REPLY == 'n' ]]
      then
        echo $branches_to_delete | xargs git branch -D
    fi
else
  echo "This command takes one arg (match pattern) or no args (match all)"
fi
}

Er bietet an, alle Zweige zu löschen, die mit einem Musterargument übereinstimmen, wenn es übergeben wird, oder alle lokalen Zweige, wenn er ohne Argumente aufgerufen wird. Es gibt auch einen Bestätigungsschritt, da wir ja Dinge löschen, das ist also nett.

Das ist irgendwie dumm - wenn es keine Zweige gibt, die dem Muster entsprechen, erkennt es das nicht.

Ein Beispiel für einen Ausgabelauf:

$ gitbd test
Matching branches:

dummy+test1
dummy+test2
dummy+test3

Delete? [Y/n]

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