Obtén el hash corto de la versión Git

382

¿Hay una manera más limpia de obtener el hash de versión corta HEADde Git?

Quiero ver el mismo resultado que obtengo de:

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

Originalmente usé el comando anterior para generar una cadena de versión, pero esto es aún mejor:

git describe --tags

Producirá cadenas como 0.1.12(commit etiquetado) o 0.1.11-5-g0c85fbc(cinco commits después de la etiqueta).

Atila O.
fuente
2
Como parece ser bueno manipulando datos con tuberías y otras cosas, debe saber sobre los alias git . 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
@ MatrixFrog gracias por el consejo! Ya tenía algunos alias git simples, pero no sabía cuán poderosos pueden ser hasta ahora. Me gusta especialmente la pantalla de Graphviz.
Atila O.
1
Huh Cuando corro git describe --tagsme sale el mensaje "fatal: no se encontraron nombres, no puedo describir nada". .
Quinn Commandado
@QuinnComendant Probablemente necesites etiquetar algo primero para --tagstrabajar. Intenta crear una etiqueta primero ; por ej git tag 1.0.0.
Atila O.
Posible duplicado de git obtener hash corto de hash regular
Cristian Ciupitu

Respuestas:

697

Prueba esto:

git rev-parse --short HEAD

El comando git rev-parsepuede hacer una cantidad notable de cosas diferentes, por lo que deberá revisar la documentación con mucho cuidado para detectarlo.

Mark Longair
fuente
44
puede hacer lo contrario y obtener el hash de confirmación larga del hash de confirmación corta haciendo lo siguientegit rev-parse HEAD
Andy
99
El comando también funciona con ID de revoluciones largas que se copian de otras fuentes como git log, por ejemplo, git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18fretornos97dd2ae
chiborg
3
Simplemente funciona con referencias. Puede usar HEAD, nombres de etiquetas, nombres de ramas o hashes simples.
d12frosted
1
¡Advertencia, esto devuelve un hash de confirmación de 7 caracteres (por defecto) mientras que muchos lugares como gitlab usan 8 caracteres!
masterxilo
3
Puede usar git rev-parse --short=8 HEADpara obtener la longitud de 8 caracteres que usa GitLab. También puede establecer core.abbreven 8 para un repositorio de git específico con un comando como git config core.abbrev 8 Source
n8felton el
112

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

git log -1 --pretty=format:%h 
Karl Bielefeldt
fuente
70
git log -1 --abbrev-commit

También lo haré.

git log --abbrev-commit

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

Sanjeev
fuente
1
¡El segundo es exactamente lo que estaba buscando! Muy simple de recordar y útil en la vida diaria.
iFreilicht
También funciona con git log --pretty=oneline, a diferencia de lo contrario --oneline, imprime hashes de tamaño completo.
sdaau
46

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

git log --oneline

Tenga en cuenta que esto es una abreviatura de

git log --pretty=oneline --abbrev-commit
La daga de Gilbert Arenas
fuente
1
--en línea es la mejor opción
Juan Ignacio Barisich
1
@JuanIgnacioBarisich la mejor opción depende de la cantidad de información que necesita ver. En caso de que se necesite más información como el autor o la fecha, git log --abbrev-commit sería una mejor opción. también registrar --pretty podría ser una mejor opción para elegir qué información registrar
velocidad
35

Una forma realmente simple es:

git describe --always
Steven Shaw
fuente
1
ja, dulce, que se ocupa de los casos en los que git describen lo contrario se producirá un error (debido a describir espera una etiqueta de algún lugar en la historia) THX
afilado
8
No es bueno si desea estrictamente el hash corto, ya que esto puede devolver una etiqueta anotada si hay una.
Zitrax
En algunos casos git describe --longpodría ayudar. De los documentos : "Siempre muestra el formato largo (la etiqueta, el número de confirmaciones y el nombre abreviado de la confirmación) incluso cuando coincide con una etiqueta ". [mi énfasis]
djvg
Usar --longes mejor, pero a veces obtienes un hash corto y otras 3 elementos separados por guiones. En estos días, uso la respuesta aceptada. En el pasado, no sabía sobre etiquetas anotadas, ¡tal vez ni siquiera existían!
Steven Shaw
16

Rama con hash corto y último comentario:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla
Fabrice
fuente
10

Tengo Git versión 2.7.4 con la siguiente configuración:

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

Ahora cuando lo hago:

git log --pretty=oneline

Obtengo una identificación de confirmación abreviada de ocho dígitos:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...
Por la corriente
fuente
1
Si bien este código puede responder la pregunta, proporcionar un contexto adicional sobre cómo y por qué resuelve el problema mejoraría el valor a largo plazo de la respuesta.
SherylHohman
1
Gran idea. Sheryl lo apreció
Down the Stream el
1

que hay de esto:

git log --pretty="%h %cD %cn %s"  

muestra algo como:

674cd0d mié, 20 nov 2019 12:15:38 +0000 mensaje de confirmación de Bob

vea la documentación del formato bonito ingrese la descripción del enlace aquí

velocidad
fuente