¿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.

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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.