2010-03-01 4 views
17

Si vous faites git branch -d branchname, il supprimera le nom de la branche s'il fait référence à une validation antérieure dans votre historique, ou vous indiquera que vous devez utiliser -D sinon. Je crée souvent des branches qui sont ensuite poussées à maîtriser, et peuvent donc être supprimées par ce critère. Existe-t-il un moyen facile de lister toutes les branches qui pointent vers des validations antérieures de master, c'est-à-dire des branches qui ne dérangeront pas git avec juste l'option -d? Des points bonus si cela fonctionne pour toutes les branches à la fois, pas seulement pour le master. J'ai 82 succursales locales et je sais qu'un certain nombre d'entre elles, sinon la plupart d'entre elles, peuvent être supprimées en toute sécurité, mais je ne veux pas prendre le temps de passer par chacune d'entre elles pour essayer de le faire. .Liste des branches git qui peuvent être supprimées en toute sécurité

Répondre

25

Essayez:

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

De git branch documentation:

Avec --merged, seules les branches fusionnées dans COMMIT nommées (par exemple les branches dont la pointe commits sont accessibles à partir du commit nom) sera listé. Avec --no-fusionné, seules les branches non fusionnées dans le commit nommé seront listées. Si l'argument est manquant, il vaut par défaut HEAD (c'est-à-dire l'extrémité de la branche actuelle).

EDIT:

pour montrer cela pour toutes les branches, vous pourriez faire quelque chose comme ceci:

exemple 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

Je suppose que vous avez br comme raccourci à la branche :). Cela fonctionne. Maintenant, comment le faire pour chaque branche, donc je peux obtenir une bonne liste de branches que je peux supprimer. En outre, cela montre les branches à distance, dont je ne veux pas. – asmeurer

+0

Super. Je pensais que cela nécessiterait un script shell. Je ne sais pas sed ou awk cependant, donc je suis content que tu l'aies écrit. Je pense que je vais modifier votre script pour ne pas montrer la branche elle-même sous chaque branche et donner la première ligne du message de validation pour la tête de chaque branche, pour que je puisse voir plus facilement ce que chaque branche pointe. Peut-être que la date de chaque commit aussi. – asmeurer

+2

Cela pourrait être amélioré (utilisez 'branch' au lieu de' br' et 'checkout' au lieu de' co', et faites que le script ne montre pas la même branche que vous êtes), mais il a fait ce que je voulais, donc je vais marquez-le comme la réponse. – asmeurer

3

git show-branch est un peu connu mais très utile outil qui affiche visuellement les commits qui sont uniques à chaque branche. Il peut être difficile à déchiffrer au début, mais une fois que vous comprenez la sortie, c'est plutôt utilisable. Il y a un bref mais bon introduction disponible.

DESCRIPTION

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. 
Questions connexes