Tengo un repositorio git con múltiples ramas.
¿Cómo puedo saber qué ramas ya están fusionadas en la rama maestra?
git branch --merged master
enumera ramas fusionadas en maestro
git branch --merged
enumera las ramas fusionadas en HEAD (es decir, la punta de la rama actual)
git branch --no-merged
enumera las ramas que no se han fusionado
Por defecto, esto se aplica solo a las sucursales locales. La -a
bandera mostrará ramas locales y remotas, y la -r
bandera solo muestra las ramas remotas.
git branch --merged
y luego eliminé las ramas locales y remotas.git branch -a --merged/no-merged
también funciona, sin crear una rama de seguimiento local en el proceso.git branch -r --merged/--no-merged
para encontrar sucursales remotas.--merged/--no-merged
toma un argumento de confirmación opcional después de él. Al menos en mi versión de git (1.9.1), agregar el indicador-a
o-r
después de esto me da un error fatal. Agregue el-a
o-r
antes--(no-)merged
.Puede usar el
git merge-base
comando para encontrar la última confirmación común entre las dos ramas. Si esa confirmación es la misma que la de su jefe, entonces la rama se ha fusionado por completo.fuente
git branch -d
se negará a eliminar una rama que no se haya fusionado con la rama actual. No se elimina la rama actual .También hay una solución de interfaz gráfica. Sólo tipo
gitk --all
Se abrirá una nueva ventana de aplicación con una representación gráfica de todo su repositorio, donde es muy fácil darse cuenta de si una rama ya se fusionó o no.
fuente
git
cliente. En Ubuntu,apt-get install gitk
.brew install git-gui
, para entrargitk
en la línea de comandos.Estoy usando la siguiente función bash como:
git-is-merged develop feature/new-feature
fuente
Uso
git merge-base <commit> <commit>
.Este comando encuentra los mejores ancestros comunes entre dos confirmaciones. Y si el ancestro común es idéntico al último commit de una "rama", entonces podemos asumir con seguridad que una "rama" ya se ha fusionado con el maestro.
Aquí están los pasos.
git merge-base <commit-hash-step1> <commit-hash-step2>
.Más información sobre git merge-base https://git-scm.com/docs/git-merge-base .
fuente
master
se fusionóbranch
y luego se agregaron 4 confirmaciones másbranch
.git log -1 $(git merge-base base-branch feature-branch)
y si vesfeature-branch
en la salida, entonces sabes que están fusionados?Sobre el tema de limpiar ramas remotas
Esto enumera cada rama remota seguida de qué ramas remotas están dentro de sus últimos SHA.
Esto es útil para discernir qué ramas remotas se han fusionado pero no se han eliminado, y cuáles no se han fusionado y, por lo tanto, están en descomposición.
Si está usando 'tig' (es como gitk pero basado en terminal), entonces puede
para ver el historial de confirmación de una sucursal sin tener que pasar por caja
fuente
Para verificar qué ramas se fusionan en master, debe usar estos comandos:
git branch <flag[-r/-a/none]> --merged master
lista de todas las ramas fusionadas en master.git branch <flag[-r/-a/none]> --merged master | wc -l
cuenta el número de todas las ramas fusionadas en maestro.Las banderas son:
-a
bandera - (todos) mostrando sucursales remotas y locales-r
bandera - (remoto) que muestra solo ramas remotas<emptyFlag>
- mostrando solo sucursales localespor ejemplo:
git branch -r --merged master
le mostrará todos los repositorios remotos combinados en maestro.fuente
Estas son mis técnicas cuando necesito averiguar si una rama se ha fusionado, incluso si se ha modificado para actualizarse con nuestra rama principal, que es un escenario común para las ramas de características.
Ninguno de estos enfoques es infalible, pero los he encontrado útiles muchas veces.
1 Mostrar registro para todas las sucursales
Usando una herramienta visual como gitk o TortoiseGit, o simplemente git log con --todos, recorra el historial para ver todas las fusiones en la rama principal. Debería poder detectar si esta rama de característica particular se ha fusionado o no.
2 Elimine siempre la rama remota cuando se fusione en una rama de características
Si tiene el buen hábito de eliminar siempre tanto la rama local como la remota cuando se fusiona en una rama de funciones, simplemente puede actualizar y podar los controles remotos en su otra computadora y las ramas de funciones desaparecerán.
Para ayudar a recordar hacer esto, ya estoy usando extensiones de flujo de git (edición AVH) para crear y fusionar mis ramas de características localmente, así que agregué el siguiente enlace de flujo de git para preguntarme si también quiero eliminar automáticamente la rama remota.
Ejemplo de creación / finalización de la rama característica
.git / ganchos / post-flow-feature-finish
3 Búsqueda por mensaje de confirmación
Si no siempre elimina la rama remota, aún puede buscar confirmaciones similares para determinar si la rama se ha fusionado o no. El problema aquí es si la rama remota se ha modificado para volverse irreconocible, como aplastar confirmaciones o cambiar mensajes de confirmación.
Comandos de ejemplo en la rama maestra:
En mi bash .profile config
fuente
git log --all --color --graph --decorate --topo-order --date=relative --abbrev-commit --pretty=format:"%C(green)%h %C(red bold)[%<(14)%ad] %Creset%s%Cred%d%C(blue) [%an]"
git log
puede agregar--merges
solo mostrar confirmaciones de fusión. stackoverflow.com/a/25986615/134761Aquí hay una pequeña frase que le permitirá saber si su sucursal actual incorpora o no tiene datos de una sucursal de origen / maestro remota:
Me encontré con esta pregunta cuando trabajaba en una rama de características y con frecuencia quería asegurarme de tener el trabajo más reciente incorporado en mi propia rama de trabajo separada.
Para generalizar esta prueba, he agregado el siguiente alias a mi ~ / .gitconfig:
Entonces puedo llamar:
para verificar si estoy al día.
fuente