¿Cómo hacer que los padres de una fusión se comprometan en git?

140

Algunos comandos git toman al padre como una revisión; otros (como git revert), como número principal. Cómo conseguir a los padres para ambos casos. No quiero usar el comando de registro gráfico, ya que eso a menudo requiere desplazarse hacia abajo por un árbol largo para encontrar el segundo padre.

Casebash
fuente

Respuestas:

179

Simple git log <hash>llamado para una confirmación de fusión muestra hashes abreviados de sus padres:

 $ git log -1 395f65d
 commit 395f65d438b13fb1fded88a330dc06c3b0951046
 Merge: 9901923 d28790d
 ...

git genera padres según su número: el primer hash (más a la izquierda) es para el primer padre, y así sucesivamente.

Si todo lo que quieres son solo los hash, las dos opciones equivalentes son:

$ git log --pretty=%P -n 1 <commit>
$ git show -s --pretty=%P <commit>

git rev-list También puede mostrar los hash de los padres, aunque primero enumerará el hash para un commit:

$ git rev-list --parents -n 1 <commit>

Si desea examinar a los padres, puede referirse a ellos directamente con quilates <commit>^1y <commit>^2, por ejemplo:

git show <commit>^1

Esto generaliza; para una fusión de pulpo puede referirse al enésimo padre como <commit>^n. Puede referirse a todos los padres con <commit>^@, aunque esto no funciona cuando se requiere una sola confirmación. Pueden aparecer sufijos adicionales después de la enésima sintaxis principal (por ejemplo <commit>^2^, <commit>^2^@), mientras que no pueden aparecer después ^@( <commit>^@^no es válida). Para más información sobre esta sintaxis, lea la rev-parsepágina del manual.

Cascabel
fuente
1
Respondiendo a mi propia pregunta: los resultados de 'git rev-list --parents -n 1 <somehash>' son: <somehash> <parent1> <parent2>. Es decir, los padres son uno numerados.
mikemaccana
También puede usar git-parents github.com/danielribeiro/dotfiles/blob/master/bin/git-parents . Simplemente póngalo en su RUTA y llame a $ git parents <commit> (<commit> por defecto a HEAD)
Daniel Ribeiro
@jefromi, realmente quiero que la parte "También tenga en cuenta que la salida de registro normal muestra ..." está en la parte superior de su respuesta. :)
Adam Monsen
3
git logy git showgenera cosas muy diferentes cuando solo hay un padre. Prefiere git logsi quieres consistencia.
Noel Yap
Esta respuesta no funciona en mi máquina Ubuntu con git (v2.17.1). No veo el Mergearchivo en la git log -1salida.
mja
29

La siguiente es la forma más simple que he encontrado para ver a los padres de una fusión.

git show --pretty=raw 3706454
usuario1483344
fuente
14
git cat-file -p 3706454 es lo mismo pero aún más corto :)
sabgenton
1
¡Ambos son muy útiles!
tecknut
Otra opcióngit log --pretty=raw -1 3706454
selalerer