2010-03-01 7 views
17

Si lo hace git branch -d branchname, eliminará el nombre de la rama si hace referencia a una confirmación anterior en su historial, o le dirá que necesita usar -D de lo contrario. A menudo creo ramas que luego se presionan para dominar y, por lo tanto, pueden eliminarse con este criterio. ¿Existe una manera fácil de enumerar todas las ramas que apuntan a las confirmaciones anteriores de maestro, es decir, las ramas a las que a git no le importará eliminar con la opción -d? Puntos de bonificación si funciona para todas las ramas a la vez, no solo para el maestro.Listar ramas de git que se pueden eliminar de manera segura

Tengo 82 sucursales locales y sé que bastantes, si no la mayoría, se pueden eliminar de manera segura, pero no quiero tomar el tiempo de revisar cada una de ellas para intentar hacerlo .

Respuesta

25

Probar:

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

De git branch documentation:

Con --merged, sólo ramas se fusionaron en los llamados cometer (es decir, las ramas cuya punta cometa, está accesible desde la llamada cometer) será listado. Con --no se fusionarán únicamente las ramas no fusionadas en la confirmación nombrada. Si el argumento falta, el valor predeterminado es HEAD (es decir, la punta de la rama actual).

EDIT:

para mostrar esto para cada rama, se podría hacer algo como esto:

ejemplo 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

estoy suponiendo que tiene ancho como un acceso directo a la rama :). Eso funciona. Ahora, cómo hacerlo para cada rama, así puedo obtener una buena lista de ramas que puedo eliminar. Además, esto muestra ramas remotas, que no quiero. – asmeurer

+0

Genial. Pensé que requeriría un script de shell. No sé sed o awk, así que me alegra que lo hayas escrito. Creo que modificaré su script para que no se muestre la rama bajo cada rama y para dar la primera línea del mensaje de confirmación para el HEAD de cada rama, para que me resulte más fácil ver a qué apunta cada rama. Tal vez la fecha de cada compromiso también. – asmeurer

+2

Esto podría mejorarse (use 'branch' en lugar de' br' y 'checkout' en lugar de' co', y haga que el script no muestre la misma rama en la que se encuentra), pero hizo lo que yo quería, así que lo haré marcarlo como la respuesta. – asmeurer

3

git show-branch es un poco conocido pero muy útil herramienta que muestra visualmente las confirmaciones que son únicas para cada rama. Puede ser difícil de descifrar al principio, pero una vez que entiendes la salida es bastante usable. Hay un breve pero bueno introduction disponible.

DESCRIPCIÓN

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. 
Cuestiones relacionadas