Encuentre un compromiso de fusión que incluya un compromiso específico

Resuelto Guillaume Morin asked hace 13 años • 14 respuestas

Imaginemos la siguiente historia:

       c---e---g--- feature
      /         \
-a---b---d---f---h--- master

¿Cómo puedo saber cuándo el compromiso "c" se ha fusionado con el maestro (es decir, buscar el compromiso de fusión "h")?

Guillaume Morin avatar Dec 12 '11 21:12 Guillaume Morin
Aceptado

Añade esto a tu ~/.gitconfig:

[alias]
    find-merge = "!sh -c 'commit=$0 && branch=${1:-HEAD} && (git rev-list $commit..$branch --ancestry-path | cat -n; git rev-list $commit..$branch --first-parent | cat -n) | sort -k2 -s | uniq -f1 -d | sort -n | tail -1 | cut -f2'"
    show-merge = "!sh -c 'merge=$(git find-merge $0 $1) && [ -n \"$merge\" ] && git show $merge'"

Entonces puedes usar alias como este:

# current branch
git find-merge <SHA-1>
# specify master
git find-merge <SHA-1> master

Para ver el mensaje de confirmación de fusión y otros detalles, utilícelo git show-mergecon los mismos argumentos.

(Basado en la respuesta de Gauthier . Gracias a Rosen Matev y javabrett por corregir un problema con sort).

robinst avatar Jun 23 '2015 08:06 robinst

Su ejemplo muestra que la sucursal featuretodavía está disponible.

En ese caso hes el último resultado de:

git log master ^feature --ancestry-path

Si la rama featureya no está disponible, puede mostrar las confirmaciones de fusión en la línea del historial entre cy master:

git log <SHA-1_for_c>..master --ancestry-path --merges

Sin embargo, esto también mostrará todas las fusiones que ocurrieron después h, entre ey gdespués feature.


Comparando el resultado de los siguientes comandos:

git rev-list <SHA-1_for_c>..master --ancestry-path

git rev-list <SHA-1_for_c>..master --first-parent

le dará el SHA-1 hcomo última fila en común.

Si lo tienes disponible, puedes utilizarlo comm -1 -2en estos resultados. Si está en msysgit, puede usar el siguiente código Perl para comparar:

perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/'  file1 file2

(código Perl de http://www.cyberciti.biz/faq/command-to-display-lines-common-in-files/ , que lo tomó de "alguien del grupo de noticias comp.unix.shell").

Consulte la sustitución del proceso si desea que sea de una sola línea.

Gauthier avatar Dec 13 '2011 16:12 Gauthier

git-get-merge localizará y mostrará la confirmación de fusión que estás buscando:

pip install git-get-merge
git get-merge <SHA-1>

El comando sigue a los hijos de la confirmación dada hasta que se encuentra una fusión en otra rama (presumiblemente maestra).

Jian avatar Mar 03 '2013 00:03 Jian