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

7voto

Todd A. Jacobs Punkte 75903

Wenn Sie nicht über Git selbst gehen müssen, können Sie Köpfe auch unter .git/refs/heads manuell oder programmatisch. Das Folgende sollte mit minimalen Anpassungen unter Bash funktionieren:

shopt -s extglob
rm -rf .git/refs/heads/!(master)

Dadurch werden alle lokalen Zweige mit Ausnahme des Master-Zweigs gelöscht. Da Ihre Upstream-Zweige unter .git/refs/remotes bleiben sie unangetastet.

Wenn Sie keine Bash verwenden oder viele Git-Repositories auf einmal durchsuchen wollen, können Sie etwas Ähnliches mit GNU find machen:

find . \
    -path remotes -path logs -prune -o \
    -wholename \*.git/refs/heads/\* \! -name master -print0 |
xargs -0 rm -rf

Die find-Lösung ist wahrscheinlich portabler, aber das Bereinigen von Pfaden und Dateinamen ist knifflig und potenziell fehleranfälliger.

6voto

Basierend auf einer Kombination aus mehreren Antworten hier - wenn Sie wollen alle Zweige, die auf der entfernten Seite existieren, behalten, aber den Rest löschen ist der folgende Oneliner genau das Richtige:

git for-each-ref --format '%(refname:short)' refs/heads | grep -Ev `git ls-remote --quiet --heads origin | awk '{print substr($2, 12)}'| paste -sd "|" -` | xargs git branch -D

6voto

kapil Punkte 1691

Wenn Sie Master, Develop und alle entfernten Zweige behalten wollen. Löschen Sie alle lokalen Zweige, die nicht mehr auf Github vorhanden sind.

$ git fetch --prune

$ git branch | grep -v "origin" | grep -v "develop" | grep -v "master" | xargs git branch -D

1] Es löscht entfernte Referenzdateien, die im entfernten Repository nicht mehr verwendet werden.

2] So erhalten Sie eine Liste aller Ihrer Zweige. Entfernen Sie Zweige, die master, develop oder origin (entfernte Zweige) enthalten, aus der Liste. Löschen Sie alle Zweige in der Liste.

Achtung - Dies löscht auch Ihre eigenen lokalen Zweigstellen. Tun Sie dies also, wenn Sie Ihren Zweig zusammengeführt haben und eine Bereinigung nach der Zusammenführung durchführen, löschen.

3voto

Dimitar Grivov Punkte 31

git branch -d [branch name] für lokales Löschen

git branch -D [branch name] auch für lokales Löschen, erzwingt es aber

3voto

Premraj Punkte 65511

Viele lokale Zweigstellen auf einmal löschen

# delete all local unmerged branches
git branch --no-merged | egrep -v "(^\*|master|dev)" | xargs git branch -D
# delete all local branches (merged and unmerged).
git branch | egrep -v "(^\*|master|dev)" | xargs git branch -D  

Löschen von entfernten Zweigen

# Deleting non-existent tracking branches
git remote prune <remote> --dry-run
# Deleting a single remote branch
git push <remote> --delete <branch>
# Deleting many remote branches at once
git branch -r --merged | egrep -v "(^\*|master|dev)" | sed 's/origin\///' | xargs -n 1 git push origin --delete

Fuente

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