La salida más corta posible del registro de git que contiene autor y fecha

465

¿Cómo puedo mostrar una salida de registro git con (al menos) esta información:

* author
* commit date
* change

Lo quiero comprimido a una línea por entrada de registro. ¿Cuál es el formato más corto posible para eso?

(intentado --format=onelinepero eso no muestra la fecha)

Jesper Rønn-Jensen
fuente
2
Quizás te guste mi versión en color: stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

Respuestas:

700

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

hizo el trabajo Esto produce:

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi
  93f1526 jesper  Tue Nov 25 09:45:56 2008 +0000  adding time.ZONE.now as time zone 
  2f0f8c1 tobias  Tue Nov 25 03:07:02 2008 +0000  Timezone configured in environment
  a33c1dc jesper  Tue Nov 25 01:26:18 2008 +0000  updated to most recent will_pagina

Inspirado por la pregunta stackoverflow: "salida de registro git como svn ls -v" , descubrí que podía agregar los parámetros exactos que necesitaba.

Para acortar la fecha (sin mostrar la hora) use --date=short

En caso de que tuviera curiosidad sobre cuáles eran las diferentes opciones:
%h= commit hash abreviado
%x09= tabulación (carácter para el código 9)
%an= nombre del
%adautor = fecha del autor (el formato respeta --date = opción)
%s= asunto
De kernel.org/pub/software/scm /git/docs/git-log.html (sección BONOS FORMATOS) por comentario de Vivek.

Jesper Rønn-Jensen
fuente
66
... y también es útil agregar date=shortcomo sugiere cdunn2001 en otra respuesta
Jesper Rønn-Jensen
10
Mi línea favorita (corta) ahora es cambiar la fecha antes del autor y usar la fecha corta:git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
Jesper Rønn-Jensen
143
Dale sabor a color y también muestra referencias:git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
kynan
16
Tabla de columnas de ancho fijo:alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
15
En caso de que tuviera curiosidad sobre cuáles eran las diferentes opciones:% h = hash de confirmación abreviado,% x09 = tabulador (carácter para el código 9),% an = nombre del autor,% ad = fecha del autor (el formato respeta --date = opción), % s = sujeto. Desde kernel.org/pub/software/scm/git/docs/git-log.html (sección FORMATOS BONITOS )
Vivek
204

Yo uso estas dos configuraciones .gitconfig:

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset

% ad es la fecha del autor, que puede anularse --dateo la opción especificada en la stanza [log] en .gitconfig. Me gusta la fecha relativa porque da una sensación inmediata de cuándo se cometieron las cosas. La salida se ve así:

6c3e1a2 2 hours ago [email protected] lsof is a dependency now.
0754f18 11 hours ago [email protected] Properly unmount, so detaching works.
336a3ac 13 hours ago [email protected] Show ami registration command if auto register fails
be2ad45 17 hours ago [email protected] Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago [email protected] Shorten while loops

Por supuesto, todo esto es en color, por lo que es fácil distinguir las diversas partes de una línea de registro. También es el valor predeterminado al escribirgit log debido a la sección [formato].

ACTUALIZACIÓN 2014: dado que git ahora admite relleno, tengo una buena enmienda a la versión anterior:

pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s

Esta derecha alinea las fechas relativas y la izquierda alinea los nombres de los confirmadores, lo que significa que obtienes una apariencia de columna que es fácil a la vista.

Captura de pantalla

  ss # 1

ACTUALIZACIÓN 2016: Dado que la firma de confirmación de GPG se está convirtiendo en una cosa, pensé en actualizar esta publicación con una versión que incluye verificación de firma (en la captura de pantalla es la letra magenta justo después de la confirmación). Una breve explicación de la bandera:

¿% G ?: muestre "G" para una buena firma (válida), "B" para una mala firma, "U" para una buena firma con validez desconocida y "N" para ninguna firma

Otros cambios incluyen:

  • los colores ahora se eliminan si el resultado es algo diferente al tty (que es útil para grepping, etc.)
  • git log -g ahora contiene el selector de reflog.
  • Guarde 2 parens en los nombres de referencia y colóquelos al final (para preservar la alineación de la columna)
  • Truncar fechas relativas si son demasiado largas (p 3 years, 4... Ej. )
  • Truncar los nombres de los comprometidos (puede ser un poco corto para algunas personas, simplemente cambie %<(7,trunc)o consulte la función git .mailmap para acortar los nombres de los comprometidos)

Aquí está la configuración:

pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D

En general, la alineación de columnas ahora se conserva mucho mejor a expensas de algunos (con suerte) caracteres inútiles. No dude en editar si tiene alguna mejora, me encantaría hacer que el color del mensaje dependa de si una confirmación está firmada, pero no parece que sea posible un cajero automático.

Captura de pantalla

Captura de pantalla de git log

andsens
fuente
3
Puede acortar aún más las líneas utilizando un mapa de correo . He abreviado los nombres de colegas en mi lugar de trabajo a solo su primer nombre :-)
andsens
2
Las respuestas de formato pequeño son buenas, y la tigrespuesta brinda interactividad sin la configuración requerida, pero esta es brillante: brinda la salida de una línea solicitada (¡con color para arrancar!) Utilizando el comando estándar 'git log'. Muy agradable.
Brent Faust
Cuando uso --derecha-izquierda, ya no obtengo las > <marcas. Intenté agregar %mal formato, pero luego >aparece cada vez, incluso para un normal git log. ¿Alguna pista de cómo las marcas se comportan normalmente con el formato?
Vituel
1
@AlvaroCavalcanti seguro no hay problema! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens
2
@ TrầnViệtHoàng --onelinees solo un alias para --pretty=oneline. format.prettyes el formato bonito predeterminado, pero no hay forma de anular format.onelineafaik. Lo que haría es omitir la pretty = shortloglínea en la configuración y luego crear un alias para ejecutar git log --pretty=shortlog.
andsens
99
git log --pretty=format:"%H %an %ad"

utilizar --date=para establecer un formato de fecha

git log --pretty=format:"%H %an %ad" --date=short
knittl
fuente
1
¡Excelente! La próxima vez probablemente solo use% h sobre% H ya que el hash no tiene sentido para mis ojos humanos :)
Jesper Rønn-Jensen
como desées. solo di un ejemplo simple;)
knittl
2
¡Frio! No estaba al tanto de --date = short
Jesper Rønn-Jensen
3
Solo lanzando esto por ahí (8 años tarde): el hash puede parecer una tontería, pero es una herramienta útil si quisieras seleccionar o comparar los commits. A menudo
enumeras
81

Siéntase libre de usar este:

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s" -7

Nota la -7 en cuenta que al final, para mostrar solo las últimas 7 entradas.

Mira:

ingrese la descripción de la imagen aquí

Hannes Schneidermayer
fuente
3
--date=shortse puede agregar para hacerlo más corto.
xuhdev
@Hannes, ¿dónde están los nombres de las sucursales?
Pacerier
@Pacerier git logsiempre muestra el historial de la rama actualmente desprotegida.
Hannes Schneidermayer
Agregar %dpara restaurar "nombres de referencia" como (HEAD -> master).
2540625
¿Por qué usar en resetlugar de auto?
2540625
49

tig es una posible alternativa al uso del registro de git comando , disponible en las principales distribuciones de código abierto * nix.

En debian o ubuntu intente instalar y ejecutar de la siguiente manera:

$ sudo apt-get install tig

(tig se instala)

$ tig

(el registro se muestra en el buscapersonas de la siguiente manera, con el hash de confirmación actual en la parte inferior)

2010-03-17 01:07 ndesigner      changes to sponsors list
2010-03-17 00:19 rcoder         Raise 404 when an invalid year is specified.
2010-03-17 00:06 rcoder         Sponsors page now shows sponsors' level.
-------------------------- skip some lines ---------------------------------
[main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%)

Dado que Markdown no admite la coloración de texto, imagine: columna 1: azul; columna 2: verde; columna 3: color de texto predeterminado. Última línea, resaltada. Presione Q o q para salir.


tigjustifica las columnas sin bordes irregulares , lo que no garantiza una pestaña ASCII (% x09).

Para un formato de fecha corto, presione D mayúscula (nota: d minúscula abre una vista de diferencias). Configúrelo permanentemente agregando show-date = shorta ~ / .tigrc; o en un[tig] sección en .git / configure o ~ / .gitconfig.

Para ver un cambio completo :

  • presiona Enter . Se abrirá un subpanel en la mitad inferior de la ventana.
  • use las teclas k , j para desplazarse por el cambio en el subpanel.
  • al mismo tiempo, use las teclas arriba y abajo para pasar de commit a commit.

Dado que tig es independiente de git y aparentemente * nix específico, probablemente requiera que cygwin se instale en Windows. Pero para fedora Creo que los comandos de instalación son $ su, (enter root password), # yum install tig. Para FreeBSD intentarlo % su, (enter root password), # pkg_add -r tig.


Por cierto, tig es bueno para mucho más que una vista rápida del registro: capturas de pantalla y manual

Joe genérico
fuente
Por favor proporcione un ejemplo completo. Escribir tigen mi consola simplemente me da un error-bash: tig: command not found
Jesper Rønn-Jensen
10
Guau. ¡Esta herramienta es fantástica y sorprendentemente rápida! brew install tig
corrida de toros
si usa mac, instale cerveza tig
Pedro Brasileiro
1
en Windows, los usuarios de babun puedenpact install tig
obojdi
34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

o

git log --pretty=format:'%h %ad %s | %an' --date=short  

... haciendo referencia a la respuesta anterior de cdunn2001: perdería el correo electrónico del autor e incluiría solo el nombre del autor, según Jesper y knittl, pero de acuerdo con la idea de cdunn2001 de mantener la salida en columnas de ancho constante para facilitar la lectura ( ¡gran idea!). Sin embargo, en lugar de una columna separada a la izquierda para el nombre del autor, envuelvo esa marca al final del comando con paréntesis o la compenso con una tubería. (Realmente podría ser cualquier personaje que sirva como una ayuda visual para leer la salida ... aunque podría tener sentido evitar las barras inclinadas hacia atrás o hacia adelante para reducir la confusión de la salida con un directorio o algo así).

Salida de muestra:

6fdd155 2015-08-10 Fixes casting error in doSave | John Doe
c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane
29a24a6 2015-08-10 Fixes bug in Course | Mac
Sean
fuente
31

Utilice alias git predefinido, es decir:

$ git work

Creado una vez por comando:

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

O más coloreado con gráfico:

$ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all'

ingrese la descripción de la imagen aquí

Míra
fuente
Sí, me gusta este!
Alex
8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

Resultado:

e17bae5 2011-09-30  Integrate from development -> main      [email protected]
eaead2c 2011-09-30  More stuff that is not worth mentioning [email protected]
eb6a336 2011-09-22  Merge branch 'freebase' into development        [email protected]

Lo de ancho constante es lo primero. La parte menos importante, el dominio de correo electrónico, es la última y fácil de filtrar.

cdunn2001
fuente
4

Para mostrar los commits que he preparado que están listos para presionar, hago

git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS

El resultado se parece a:

ef87da7 2013-01-17 haslers      (Hm)Fix NPE in Frobble
8f6d80f 2013-01-17 haslers      Refactor Frobble
815813b 2013-01-17 haslers      (t)Add Wibble to Frobble
3616373 2013-01-17 haslers      Add Foo to Frobble
3b5ccf0 2013-01-17 haslers      Add Bar to Frobble
a1db9ef 2013-01-17 haslers      Add Frobble Widget

Donde la primera columna aparece en amarillo, y la 'H' 'm' y 't' en parentesis muestran la CABEZA, el maestro y el tronco y aparecen en sus colores habituales "- decorados"

Aquí está con saltos de línea para que pueda ver lo que está haciendo:

git log remotes/trunk~4..HEAD --date=short
    --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s"
    | awk -F'\t' '{
         gsub(/[, ]/,"",$2);
         gsub(/HEAD/, "\033[1;36mH\033[00m",$2);
         gsub(/master/, "\033[1;32mm\033[00m",$2);
         gsub(/trunk/, "\033[1;31mt\033[00m",$2);
         print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}'

Me he alias a "escenificado" con:

git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"'

(¿Hay una manera más fácil de escapar de eso? Fue un poco complicado resolver lo que necesitaba escapar)

Sam Hasler
fuente
Mi versión actual de este script es ~ 300LOC y hace mucho más: ¶ - opción para alternar el mensaje de confirmación en línea / multilínea¶ - muestra el espacio en blanco de la línea / la línea termina en modo en línea. por ejemplo: ¶ - especifique el rango a través de param¶ - Resalte el problema # 's¶ - resalte / ^ - (Arreglar | Agregar | Refactorizar) / en los mensajes de confirmación¶
Sam Hasler
Para citas automáticas robustas de alias, vea esta respuesta . ¿Te gustaría compartir tu ~ 300LOC de una vez?
Tom Hale
Gracias tom! si llego a publicar esa secuencia de comandos (necesitaría eliminar algunas cosas confidenciales / específicas de la compañía) te enviaré un ping aquí.
Sam Hasler
1

Todas las sugerencias mencionadas utilizan %smarcador de posición para el tema. Lo recomendaré %Bporque el %sformato conserva nuevas líneas y el mensaje de confirmación de varias líneas aparece aplastado.

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"
palik
fuente
0

Ejecute esto en la carpeta del proyecto:

$ git log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all

Y si lo desea, agregue esta línea a su ~ / .gitconfig:

[alias]
    ...
    list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all
MUH Mobile Inc.
fuente
0

Pruebe git log --pretty = fuller, le mostrará: - Autor: Fecha del autor: Confirmar: Fecha de confirmación:

Espero que esto ayude.

Varun Sharma
fuente