2011-08-26 14 views
16

Necesito hacer un git revert -m, pero no he podido encontrar ninguna documentación sobre cómo están numerados los padres de cometer. Todo lo que he visto (incluidas las páginas de ayuda para rev-parse) me dice que los padres están contados pero no dicen cómo están numerados. ¿Podría alguien señalarme dónde se define esto y cómo determinarlo?¿Cómo averiguo la numeración de padres de commit de fusión?

Respuesta

17
git show --format="%P" <SHA> 

le dará los SHA principales de la confirmación dada en orden numérico. La mayoría de las veces, la que desea especificar para git revert será 1.

En el caso de la mayoría de las fusiones, el SHA de la rama que fue desprotegido será el primer padre, y el SHA de la sucursal que se fusionó será el segundo. (Básicamente, la rama desprotegida es siempre la primera matriz, los otros padres son las ramas que se especificaron en el comando de fusión en el orden de su especificación).

Si desea encontrar el SHA para un padre en particular, utilizar el operador de intercalación:

  • primer padre: git rev-parse <SHA>^1
  • segundo padre: git rev-parse <SHA>^2

etcétera.

+1

Buena respuesta, pero el peligro radica en "la mayoría", no en todos. Tengo un git repo que se convirtió de svn y varias operaciones 'git-filter-branch' se han ejecutado en él, y ahora parece que en algunos casos el orden es al revés. Ver http: // stackoverflow.com/questions/27704438/find-the-right-parent-of-a-merge-commit-in-a-non-interactive-way –

-2

El 'número' de compromiso es, de hecho, su valor hash SHA1. Esto le da una gran integridad para fines de verificación.

También tiene el agradable efecto secundario de que usted no puede/espera que sea de ninguna manera secuencial, que también es una propiedad natural de la rama & fusionar sistemas VCS distribuidos para múltiples usuarios. Hay muchos comandos para caminar en el árbol y métodos para hacer referencia a confirmaciones, como HEAD^o HEAD ^^.

git help revisons ofrece una descripción completa de todas las sintaxis diferentes.

+1

La pregunta es sobre la numeración de los padres, no las identificaciones de los commits. es decir, "Primero padre", "Segundo padre" ("HEAD^1" vs. "HEAD^2") – ABMagil

+0

@ABMagil. La pregunta original no decía explícitamente que se trataba de contar dentro de la sintaxis de estilo HEAD ^^ ~~, simplemente hablaba sobre la numeración de compromiso, que canónicamente es el sha1. Terminé diciendo que el estilo HEAD^estaba disponible; no pude resaltar 'git help repaons' como fuente. –

5

Al hacer que git log o git se muestren en la fusión, commit le mostrará la lista de padres para la fusión en el encabezado "Merge:". Esto enumera los padres de la fusión en orden secuencial de izquierda a derecha. La primera es la primera matriz, la segunda es la segunda matriz, etc.

Por ejemplo en el repositorio git:

$ git show 0af53e188a3a8915f65c3b3edaeed3e07d8d3802 
commit 0af53e188a3a8915f65c3b3edaeed3e07d8d3802 
Merge: b81b758 8894d53 
Author: Junio C Hamano <[email protected]> 
Date: Thu Aug 11 11:04:28 2011 -0700 

    Merge branch 'cb/partial-commit-relative-pathspec' 

    * cb/partial-commit-relative-pathspec: 
     commit: allow partial commits with relative paths 

b81b758 es la primera matriz, y 8894d53 es la segunda matriz para la merge commit 0af53e1.

Las confirmaciones de padres se numeran según su orden de aparición en la línea de comandos cuando la confirmación se realiza:

[on branch master] 
$ git merge foo bar baz 

que se fusionarán las ramas foo, bar y baz en maestro y crear una nueva combinación de cometer si el avance rápido no fue posible.

En la combinación de fusión resultante, "maestro" será el primer padre, "foo" 2º, "barra" 3º y "baz" 4º.

Cuestiones relacionadas