2010-03-01 11 views
17

Wenn Sie git branch -d branchname tun, löscht es Zweigname, wenn es eine frühere Commit in Ihrem Verlauf verweist, oder Ihnen sagen, dass Sie -D sonst verwenden müssen. Ich erstelle oft Zweige, die später zum Master geschoben werden und somit nach diesem Kriterium gelöscht werden können. Gibt es eine einfache Möglichkeit, alle Zweige aufzulisten, die auf frühere Commits des Masters zeigen, dh Zweige, die git nichts dagegen haben, mit der Option -d zu löschen? Bonuspunkte, wenn es für alle Filialen gleichzeitig funktioniert, nicht nur für Master.Liste Git Zweige, die sicher gelöscht werden können

Ich habe 82 lokale Niederlassungen und ich weiß, dass einige, wenn nicht die meisten von ihnen sicher gelöscht werden können, aber ich möchte nicht die Zeit nehmen, um durch jeden zu gehen, um es zu versuchen .

Antwort

25

Versuchen:

$ git checkout master # or whatever branch you might compare against ... 
$ git branch --no-merged 
$ git branch --merged 

Von git branch documentation:

Mit --merged fusionierte nur verzweigt sich in den genannten begehen (dh den Zweigen, deren Spitze Commits erreichbar sind ausschließlich aus dem genannten begehen) wird aufgelistet. Mit --no-merged werden nur Zweige aufgelistet, die nicht in den benannten Commit eingebunden sind. Wenn das Argument fehlt, wird standardmäßig HEAD (d. H. Die Spitze des aktuellen Zweiges) verwendet.

EDIT:

dies für jede Branche zu zeigen, können Sie etwas tun könnte:

Beispiel Repo:

o <--- experimental 
| 
o 
| 
o <--- next 
| 
o 
| 
o <--- master 
| 
o----o <--- broken 
| 
o 
| 


$ for branch in `git branch --no-color --verbose | \ 
sed -e 's/*//' | awk '{print $1}'`; \ 
do echo "[$branch]"; git checkout -q $branch; git branch --merged; done 

[broken] 
* broken 
[master] 
* master 
[next] 
master 
* next 
[experimental] 
master 
next 
* experimental 
+0

Ich nehme an, Sie br als Verknüpfung zu verzweigen :) haben. Das funktioniert. Nun, wie es für jeden Zweig gemacht wird, damit ich eine gute Liste von Zweigen bekommen kann, die ich löschen kann. Außerdem zeigt dies entfernte Zweige, die ich nicht möchte. – asmeurer

+0

Großartig. Ich dachte, es würde ein Shell-Skript erfordern. Ich kenne sed oder awk nicht, also bin ich froh, dass du es geschrieben hast. Ich denke, ich werde Ihr Skript ändern, um die Verzweigung selbst unter jeder Verzweigung nicht anzuzeigen, und die erste Zeile der Commit-Nachricht für den KOPF jeder Verzweigung geben, um es mir leichter zu sehen, was jeder Zweig zeigt. Vielleicht auch das Datum jedes Commits. – asmeurer

+2

Dies könnte verbessert werden (verwenden Sie 'branch' anstelle von' br' und 'checkout' anstelle von' co', und lassen Sie das Skript nicht den gleichen Zweig anzeigen, auf dem Sie sind), aber es hat getan, was ich wollte, also werde ich Markieren Sie es als Antwort. – asmeurer

3

git show-branch ist eine wenig bekannte, aber sehr nützlich Werkzeug, das die Commits, die für jeden Zweig eindeutig sind, visuell anzeigt. Es kann schwer zu entziffern sein, aber sobald Sie die Ausgabe verstehen, ist es ziemlich brauchbar. Es gibt eine kurze, aber gute introduction zur Verfügung.

BESCHREIBUNG

Shows the commit ancestry graph starting from the commits named 
    with <rev>s or <globs>s (or all refs under refs/heads and/or 
    refs/tags) semi-visually. 

    It cannot show more than 29 branches and commits at a time. 
Verwandte Themen