2012-09-05 8 views
199

Tengo un repositorio de git con muchas ramas, algunas de ellas ya fusionadas y otras no. Dado que el número de sucursales es bastante grande, ¿cómo puedo saber qué ramas no se han fusionado aún? Evitaría hacer una fusión de pulpo para volver a mezclar todas las ramas.git encontrar sucursales no fusionadas

Respuesta

333

Prueba esto:

git branch --merged master 

Se hace lo que dice en la lata (listas de ramas que se han fusionado en master). También puede levantar la inversa con:

git branch --no-merged master 

Si no se especifica master, por ejemplo ..

git branch --merged 

continuación, se le mostrará las ramas que se han fusionado en la corriente HEAD (por lo si está en master, es equivalente al primer comando; si está en foo, es equivalente a git branch --merged foo).

También puede comparar ramas ascendentes especificando la bandera -r y una referencia para comprobar en contra, lo que puede ser local o remoto:

git branch -r --no-merged origin/master 
+2

Si combina 'foo' en' maestro', aparecerá en la lista 'git branch --merder master'. Pero, ¿qué ocurre si te comprometes una vez más con 'foo'? ¿Ya no aparece en esa lista, o lo hace, ya que a pesar de que tiene nuevas confirmaciones, fue * en un punto * fusionado en 'maestro'? –

+6

@CraigOtis Ya no aparecerá en la lista. '--merged' solo enumera las ramas que están * completamente * fusionadas en la rama dada. – Amber

+0

y 'gitk --remotes --not origin/master' le mostrará las confirmaciones en cada rama que no se han fusionado a la maestra. – yoyo

25

Si una rama se fusionó ya, la fusión no tendrá otra vez hacer nada. Para que no tenga que preocuparse por la "fusión" de las sucursales que ya están fusionadas.

Para responder a su pregunta, simplemente puede emitir

git branch --merged 

a ver las ramas fusionadas o

git branch --no-merged 

para ver las ramas sin combinar. Su rama actual está implícita pero puede especificar otras ramas si lo desea.

git branch --no-merged integration 

le mostrará ramas que aún no se fusionaron en integration rama.

36

También puede utilizar el parámetro -r para mostrar sucursales remotas que no se fusionaron en master:

git branch -r --merged master 

git branch -r --no-merged 
+14

o '-a' para ver tanto remoto como local al mismo tiempo –

1

El guión continuación encontrará todos los origin/* ramas que están por delante de la rama actual

#!/bin/bash 

CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) 

echo -e "Current branch: \e[94m$CURRENT_BRANCH\e[0m" 
echo '' 

git branch -a | grep remotes/origin/ | while read LINE 
do 
    CMD="git diff --shortstat remotes/origin/${CURRENT_BRANCH}...${LINE}" 

    if $CMD | grep ' file' > /dev/null; then 
     echo -e "\e[93m$LINE\e[0m" | sed 's/remotes\/origin\///' 
     $CMD 
     echo '' 
    fi 
done 

The up-to-date version of the script

Cuestiones relacionadas