Encuentre un compromiso de fusión que incluya un compromiso específico
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")?
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-merge
con los mismos argumentos.
(Basado en la respuesta de Gauthier . Gracias a Rosen Matev y javabrett por corregir un problema con sort
).
Su ejemplo muestra que la sucursal feature
todavía está disponible.
En ese caso h
es el último resultado de:
git log master ^feature --ancestry-path
Si la rama feature
ya no está disponible, puede mostrar las confirmaciones de fusión en la línea del historial entre c
y 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 e
y g
despué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 h
como última fila en común.
Si lo tienes disponible, puedes utilizarlo comm -1 -2
en 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.
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).