2012-05-09 33 views
8

¿Cómo se puede encontrar el compromiso de fusión anterior entre dos ramas?Cómo encontrar el compromiso de fusión anterior

Me gustaría ver los cambios en mi rama principal desde la última vez que he fusionado la rama de publicación en la rama principal. Para ver los cambios en la rama de versión desde la última rama, es tan fácil como git diff ...release

Pero obviamente git diff release... no funciona porque también incluye todos los cambios antes de la última fusión. Por lo tanto creo que es necesario el ID de comprometerse de la última combinación de pasarlo a git diff

git log --reverse --ancestry-path `git merge-base HEAD release`.. \ 
     --format=format:%H|head -n1 

parece funcionar y se puede utilizar con git diff $(...), pero parece muy complicado. ¿Hay alguna solución más fácil?

Ejemplo

I 
/\ 
A1 B1 
\ | 
| M 
| | 
A2 B2 

Aquí I es cometer el inicial. A[12] son los commit commits y B[12] son los commits principales. M es la confirmación anterior. En el ejemplo, los cambios entre la última fusión y el máster son solo los cambios introducidos por B2. git merge-base A2 B2 devuelve A 1. Y git diff B2 A1 incluye los cambios de B1. Por lo tanto, la pregunta es cómo encontrar M en el caso general más complejo para que uno pueda ejecutar git diff M B2 sin tener que encontrar manualmente M.

+0

Esta no es la forma más eficiente, pero puede consultar 'git log --graph --oneline' para encontrar la confirmación. – Shahbaz

Respuesta

-1

Esto mostrará la última combinación de cometer entre foo rama y señor rama

git log foo master --oneline --date-order --merges -1 

--oneline is just to keep the output short 
--date-order to get the latest first 
--merges to only show merge commits 
-1 to display the first result only 
+3

Este comando parece darme la última combinación en cualquiera de las ramas. Esto incluye las fusiones de maestro o foo con otra cosa. Pero me gustaría tener la última fusión de foo con el maestro, no con nada más. –

+0

Este comando es útil para obtener la última fusión de una rama si registra una sola rama: git log master --oneline [...] –

6

Parece que lo que busca es el punto en el que las dos ramas comenzaron a diferir, no será la última fusión entre los dos ramas Estos dos conceptos son diferentes porque su rama de versión puede haber sido reenviada rápidamente algún tiempo después de que se fusionó.

git merge-base master release encontrará el ancestro común más reciente de sus ramas maestra y de liberación (es decir, el último compromiso que los dos tienen en común).

Luego, en el maestro puede usar git diff [common ancestor] HEAD para ver los cambios que se han realizado en el dominio desde el antecesor común.

+0

He añadido un ejemplo a la pregunta para mostrar por qué 'git merge-base' en sí mismo no está resolviendo el problema. –

+0

@Roland Shulz Entiendo. Trataré de llegar a una respuesta diferente –

Cuestiones relacionadas