2011-04-17 25 views
213

¿Existe alguna manera más clara de obtener la versión corta hash de HEAD desde git?Obtenga la versión corta de git hash

quiero ver el mismo resultado que obtengo de

git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8 

ACTUALIZACIÓN: He utilizado originalmente presente para generar una cadena de versión, pero esto es aún mejor:

git describe --tags 

Saldrá cadenas como 0.1.12 (confirmación etiquetada) o 0.1.11-5-g0c85fbc (5 confirmaciones después de la etiqueta).

+2

Ya que parece ser bueno manipulando datos con pipes y otras cosas, debe saber sobre [git aliases] (https://git.wiki.kernel.org/index.php/Aliases). En este caso, hay un comando para lo que quieres (ver respuestas) pero eventualmente encontrarás algo donde no lo hay, y los alias son geniales para eso. – MatrixFrog

+0

@ [MatrixFrog] (http://stackoverflow.com/users/65977/matrixfrog) gracias por la sugerencia. Ya tenía algunos alias de git simples, pero no sabía lo poderosos que pueden ser hasta ahora. Me gusta especialmente la visualización graphviz. –

+1

Huh. Cuando ejecuto 'git describe --tags' obtengo el mensaje, _" fatal: no se encuentran nombres, no puedo describir nada "_. –

Respuesta

404

Prueba esto:

git rev-parse --short HEAD 

El comando git rev-parse puede hacer un notable número de cosas diferentes, por lo que había necesidad de pasar por the documentation muy cuidadosamente para detectar que sin embargo.

+2

puede hacer el proceso inverso y obtener el hash de compromiso largo desde el hash de confirmación corto haciendo lo siguiente '' 'git rev-parse HEAD''' –

+4

El comando también funciona con identificadores largos de rev copiados de otras fuentes como 'git log', por ejemplo' git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18f' devuelve '97dd2ae' – chiborg

+0

Simplemente funciona con referencias. Puede usar HEAD, nombres de etiquetas, nombres de ramas o hashes simples. – d12frosted

80

Usted puede hacer casi cualquier formato que desee con --pretty=format:

git log -1 --pretty=format:%h 
12

Rama con hash corto y último comentario:

git branch -v 

    develop  717c2f9 [ahead 42] blabla 
* master  2722bbe [ahead 1] bla 
18

Una forma muy sencilla es:

git describe --always 
+0

ha, dulce, que aborda los casos en que git describe fallará de otra manera (porque describe espera una etiqueta en algún lugar de la historia) thx – keen

+3

No es bueno si estrictamente quiere el hash corto, ya que esto puede devolver una etiqueta anotada. – Zitrax

-8

git diff --full-index generó la diferencia con hash completo

36
git log -1 --abbrev-commit 

también lo hará.

git log --abbrev-commit 

listará las entradas de registro con suma de comprobación abreviada SHA-1.

+0

¡El segundo es exactamente lo que estaba buscando! Muy simple de recordar y útil en la vida diaria. – iFreilicht

10

Una manera simple de ver el git commit versión corta y el git commit mensaje es:

git log --oneline 

Tenga en cuenta que esta es la abreviatura

git log --pretty=oneline --abbrev-commit 
1

tengo:

git --version 

git version 2.7.4

uso el siguiente:

git config --global log.abbrevcommit yes 
git config --global core.abbrev 8 

Ahora, cuando hacemos:

git log --pretty=oneline 

Obtenemos una abreviada Commit Identificación de 8 dígitos:

ed054a38 add project based .gitignore 
30a3fa4c add ez version 
0a6e9015 add logic for shifting days 
af4ab954 add n days ago 
... 
+1

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional sobre cómo y por qué soluciona el problema mejoraría el valor a largo plazo de la respuesta. – SherylHohman

+1

Gran idea. Lo aprecié, Sheryl –

Cuestiones relacionadas