2009-05-27 11 views
17

En Git, hay numerosas maneras de referirse a un commit, incluyendo el hash SHA completo o una forma abreviada del hash (por ejemplo, los primeros 6 caracteres más o menos). También puede asignar commits utilizando una sintaxis "amigable", como HEAD, HEAD ^, HEAD ^^, HEAD ~ 3, y así sucesivamente.En Git, ¿hay alguna manera de obtener el nombre "amigable" para una confirmación arbitraria?

Dada una confirmación arbitraria en forma de hash SHA, ¿hay alguna herramienta en Git para encontrar un nombre "amistoso" para dicha confirmación?

Si uso git-show-branch, obtengo una lista de revisiones en forma "amigable", por lo que siento que debe haber una manera ... No puedo encontrar una herramienta para hacerlo.

+0

sólo por el bien integridad, aquí es la pregunta opuesta: http://stackoverflow.com/questions/3003554/is-there-any-way-to-get-the -sha-of-a-commit-from-its-message – Benjol

Respuesta

17

Puede usar "git name-rev" para obtener el formulario que está solicitando. Un problema con esa forma es que, al ser relativo a una rama, no es un nombre permanente. Entonces, una alternativa es "git describe", que produce un nombre alternativo alternativo basado en cuán lejos está una etiqueta de un compromiso determinado.

Por ejemplo:

[email protected]:~/src/git <master>$ git name-rev 3cd7388 
3cd7388 master~2 

Pero entonces después de hacer un "git pull", amo ~ 2 podría significar otra cosa. Por el contrario:

[email protected]:~/src/git <master>$ git describe 3cd7388 
v1.6.3.1-153-g3cd7388 

Ahora "v1.6.3.1-153-g3cd7388" es un nombre permanente. Por supuesto, todavía es un poco largo (aunque puede acortar el bit hash al final especificando "--abbrev = 4" por ejemplo) pero comunica que 3cd7388 es 153 cambios después de la versión 1.6.3.1.

+1

Gracias, ambas técnicas son útiles. Estaba más interesado en el comportamiento de git-name-rev, porque mi caso de uso específico era que estaba usando git-log --grep para encontrar una confirmación con un mensaje específico, y luego quería poder referirme a es como un parámetro para git-revertir sin tener que recordar un hash. – mipadi

+2

En ese caso, tenga en cuenta la opción "--stdin" para git name-rev: debe poder realizar la salida de registro de git directamente. – araqnid

+0

Wow. Ese. Es. Increíble. ¡Gracias! – mipadi

3

Trate git describe:

$ git describe --all --contains 90de2680dc54c0d600b0694bd175bd09357a8dba 
master~2 
Cuestiones relacionadas