Git: encuentra el ancestro común más reciente de dos ramas

Resuelto Ted asked hace 15 años • 6 respuestas

¿Cómo encontrar el ancestro común más reciente de dos ramas de Git?

Ted avatar Oct 11 '09 04:10 Ted
Aceptado

Estás buscando git merge-base. Uso:

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
CB Bailey avatar Oct 10 '2009 21:10 CB Bailey

git diff master...feature

muestra todas las nuevas confirmaciones de su rama de funciones actual (posiblemente de múltiples confirmaciones).

man git-diffdocumentos que:

git diff A...B

es lo mismo que:

git diff $(git merge-base A B) B

pero ...es más fácil de escribir y recordar.

Como mencionó Dave , el caso especial de HEADpuede omitirse. Entonces:

git diff master...HEAD

es lo mismo que:

git diff master...

lo cual es suficiente si la rama actual es feature.

Por último, ¡recuerda que el orden importa! Al hacerlo git diff feature...masterse mostrarán los cambios que están activados mastery no activados feature.

Desearía que más comandos de git admitieran esa sintaxis, pero no creo que lo hagan. Y algunos incluso tienen una semántica diferente para ...: ¿ Cuáles son las diferencias entre ".." de doble punto y "..." de triple punto en los rangos de confirmación de Git?

Como se señaló en una respuesta anterior, aunque git merge-basefunciona,

$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

Si myfeaturees la rama actual, como es común, puedes usar--fork-point :

$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

Este argumento sólo funciona en versiones suficientemente recientes de git. Lamentablemente, no siempre funciona y no está claro por qué. Consulte las limitaciones señaladas al final de esta respuesta .


Para obtener información completa sobre la confirmación, considere:

$ git log -1 $(git merge-base --fork-point develop) 
Asclepius avatar Feb 09 '2017 17:02 Asclepius