¿Encontrar ramas de Git no fusionadas?
Tengo un repositorio de Git con muchas ramas, algunas de ellas ya fusionadas y otras no. Dado que la cantidad de sucursales es bastante grande, ¿cómo puedo determinar qué sucursales 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.
Prueba esto:
git branch --merged master
Hace lo que dice en la lata (enumera las ramas en las que se han fusionado master
). También puedes hacer lo inverso con:
git branch --no-merged master
Si no especifica master
, por ejemplo...
git branch --merged
luego le mostrará las ramas que se han fusionado con la actual HEAD
(por lo que 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 -r
bandera y una referencia para verificar, que puede ser local o remota:
git branch -r --no-merged origin/master
También puede usar el -r
parámetro para mostrar ramas remotas que no se fusionaron con la maestra:
git branch -r --merged master
git branch -r --no-merged
Si una rama ya está fusionada, fusionarla nuevamente no hará nada. Por lo tanto, no tiene que preocuparse por "volver a fusionar" 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 sucursal actual está implícita, pero puede especificar otras sucursales si lo desea.
git branch --no-merged integration
le mostrará las ramas que aún no están fusionadas en integration
la rama.
El siguiente script encontrará todas origin/*
las 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