¿Encontrar ramas Git no fusionadas?

276

Tengo un repositorio Git con muchas ramas, algunas de ellas ya fusionadas y otras no. Dado que el número de ramas es bastante grande, ¿cómo puedo determinar qué ramas aún no se han fusionado? Me gustaría evitar tener que hacer una fusión "pulpo" y volver a fusionar ramas que ya se han fusionado.

fluca1978
fuente
1
Primero me reí sobre el término de la "fusión de pulpo". Pero en caso de que no lo supiera, como yo: ese es el nombre oficial de una estrategia de fusión :-) Ver git-scm.com/docs/git-merge o atlassian.com/de/git/tutorials/using-branches/ estrategia de fusión
observador

Respuestas:

463

Prueba esto:

git branch --merged master

Hace lo que dice en la lata (enumera las ramas que se han fusionado master). También puede levantar el inverso con:

git branch --no-merged master

Si no especifica master, por ejemplo ...

git branch --merged

entonces le mostrará ramas que se han fusionado con la actual HEAD(por lo tanto, si está activado master, es equivalente al primer comando; si está activado foo, es equivalente a git branch --merged foo).

También puede comparar ramas ascendentes especificando la -rbandera y una referencia para verificar, que puede ser local o remota:

git branch -r --no-merged origin/master
Ámbar
fuente
55
Si fusiona fooen master, ésta aparecerá en la git branch --merged masterlista. Pero, ¿qué sucede si te comprometes una vez más foo? ¿Ya no aparece en esa lista, o lo hace, ya que aunque tiene nuevas confirmaciones, en algún momento se fusionó master?
Craig Otis
11
@CraigOtis Ya no aparecerá en la lista. --mergedsolo enumera las ramas que están completamente fusionadas en la rama dada.
Ámbar el
y gitk --remotes --not origin/masterle mostrará las confirmaciones en cada rama que no se han fusionado para dominar.
yoyo
55
Imagina esto ... ¡una respuesta genial que es fácil de entender y usar!
jleach
1
¿Hay alguna manera de obtener la lista sin revisar la sucursal? ¿Te gusta señalar al servidor y luego obtener la lista?
xbmono
57

También puede usar el -rparámetro para mostrar ramas remotas que no se fusionaron en el maestro:

git branch -r --merged master

git branch -r --no-merged

                         
NemoXP
fuente
19
o -apara ver tanto remota como local al mismo tiempo
Simon Forsberg
1
¿Debería ser el último git branch -r --no master fusionado?
MortimerCat
28

Si una rama ya está fusionada, fusionarla nuevamente no hará nada. Por lo tanto, no tiene que preocuparse por "volver a fusionar" las ramas que ya están fusionadas.

Para responder a su pregunta, simplemente puede emitir

 git branch --merged

para ver las ramas fusionadas o

 git branch --no-merged

para ver las ramas no fusionadas. 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 una integrationrama.

Adam Dymitruk
fuente
1

El siguiente script encontrará todas las 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

La versión actualizada del guión

moldcraft
fuente
0
Below script will fetch you unmerged branches and write results in .xls file 
#!/usr/bin/env bash
echo "getting list of unmerged_branches from the remote"
file_name=unmerged_branches.xls`enter code here`
current_time=$(date "+%Y.%m.%d-%H.%M.%S")
for branch in `git branch -r --no-merged | grep -v HEAD`;
do echo -e `git show --format="%cd  \\t%cr  \\t%ae" $branch | head -n 1` \\t$branch; 
done | sort -r >> $current_time.$file_name
echo "result is writtein in ";
echo $current_time.$file_name;
usuario3915489
fuente