¿Cómo puedo hacer que git log imprima el hash completo y las estadísticas breves de cada confirmación en una línea?

2 minutos de lectura

avatar de usuario
PJ Bergeron

Me gustaría obtener este tipo de salida con la línea de comandos de git:

bcfd649de8850e3bfc9584eb12be8fe136ca6985 3 files changed, 8 insertions(+), 1 deletion(-)

actualmente estoy usando git log --shortstat --reverse --pretty=onelinepero en realidad no es una sola línea y el comentario no me sirve:

bcfd649de8850e3bfc9584eb12be8fe136ca6985 Added ActionController#cookies[] as a reader for @cookies that'll return the value of the cookie instead of 
3 files changed, 8 insertions(+), 1 deletions(-)

¿Hay alguna forma de hacerlo?

  • Relacionado: stackoverflow.com/questions/21137477/…

    – jub0bs

    14/03/2015 a las 15:10

avatar de usuario
jub0bs

Puede definir su propio formato que consiste solo en el hash completo y canalizar la salida de git log a awk (editar: o sedtal como lo propone jthill en su comentario) para reemplazar líneas nuevas por espacios donde sea necesario (ver este):

git log --pretty=tformat:"%H" --shortstat | awk 'ORS=NR%3?" ":"\n"'

o

git log --pretty=tformat:"%H" --shortstat | sed 'N;N;y/\n/ /'

Prueba

$ git log --pretty=tformat:"%H" --shortstat | awk 'ORS=NR%3?" ":"\n"'
4da27ca5dc8469f19b1524a5dd381aad76f96c69   4 files changed, 26 insertions(+)
60c1e011aadc1bdbf38dde989d0f0497925678d9   4 files changed, 34 insertions(+)
f0e6da70616337f135190dc7f68e22678a7af2ff   4 files changed, 34 insertions(+)
95ea8a002f66a249946a78deb362a2e697dfb80a   4 files changed, 44 insertions(+)
9854efba2301d520bc4fe1a102e102f299ae127d   1 file changed, 2 insertions(+), 2 deletions(-)
c8ee6b36a545c67b2443eea499bf046dd1e2233d   4 files changed, 29 insertions(+)
2d4374edd2d2820f05853b4add9fc5ddba1506ac   4 files changed, 42 insertions(+)
$

  • O | sed 'N;N;y/\n/ /'

    – jthill

    14/03/2015 a las 17:37


  • Esto fallará en algunos casos porque algunas confirmaciones no tienen estadísticas. Cuando el script alcanza una confirmación “sin estadísticas”, la salida se interrumpirá. Encontré una solución para eso en un proyecto personal. github.com/dreamyguy/gitloggy publiqué mi enfoque aquí: stackoverflow.com/questions/21137477/…

    – Wallace Sidhrée

    28 de mayo de 2016 a las 10:44

avatar de usuario
Rojan G.

Para cualquier persona que llegue aquí para obtener una respuesta a “cómo obtener el hash de confirmación completo de una línea de registro de git”, como lo hice yo, hay una bandera para el git log que imprime el hash de confirmación no abreviado.

Se llama –no-abbrev-commit. La documentación se lee como:

Muestra el nombre completo del objeto de confirmación hexadecimal de 40 bytes. Esto niega –abbrev-commit, ya sea explícito o implícito por otras opciones como “–oneline”. También anula la variable log.abbrevCommit.

TL;RD: Aquí está el comando para la salida de una línea con el hash de confirmación completo:

git log --oneline --no-abbrev-commit

¿Ha sido útil esta solución?