Git: encuentra el ancestro común más reciente de dos ramas
¿Cómo encontrar el ancestro común más reciente de dos ramas de Git?
Estás buscando git merge-base
. Uso:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git diff master...feature
muestra todas las nuevas confirmaciones de su rama de funciones actual (posiblemente de múltiples confirmaciones).
man git-diff
documentos 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 HEAD
puede 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...master
se mostrarán los cambios que están activados master
y 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-base
funciona,
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Si myfeature
es 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)