¿Cómo generar git log solo con la primera línea?

330

Estoy tratando de personalizar el formato para git log. Quiero que todos los commits se muestren en una línea. Cada línea solo debe mostrar la primera línea del mensaje de confirmación.
Me di cuenta de que git log --pretty=shortdebe hacer el truco, pero en mi equipo que muestra el registro completo como git loglo hace (además de la marca de tiempo).

Además, traté de usar los marcadores de posición como se define en la página del manual . Sin embargo, no pude encontrar un comando para acortar el mensaje de registro. Probé esta línea git log --pretty=format:'%h : %s'que muestra el hash en corto %hy el mensaje completo %sen una línea.

Estoy usando git version 1.7.3.1.msysgit.0en Vista.


Tal vez tenga algo que ver con la forma en que escribo mis mensajes de confirmación. Aquí hay un ejemplo:

Added some functionality.
+ Added print function in Foo class.
+ Added conversion from foo to baz.

Entonces, con el ejemplo dado, solo quiero que la salida sea Added some functionality.antepuesta por el hash de final corto.

JJD
fuente
1
%ses el tema, no el mensaje completo.
Josh Lee
Es realmente difícil decir lo que realmente quieres. Sin embargo, el shortformato no está solo en una línea (¡sorpresa!) oneline. Si oneliney %h : %sno son lo que quieres, ¿qué les pasa? En particular, %ses el asunto, la primera línea del mensaje de confirmación. De hecho, esa debería ser una versión abreviada. ¿Es posible que haya estado haciendo confirmaciones con una sola línea larga para el mensaje y viéndolas de alguna manera con ajuste de palabras?
Cascabel
Lo entiendes totalmente. El problema es eso oneliney %sno genera lo que esperamos, al menos en mi computadora. Actualicé mi publicación con un ejemplo de mi mensaje de confirmación. Quizás ayude.
JJD

Respuestas:

544

¿Has probado esto?

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

El problema es probablemente que le falta una línea vacía después de la primera línea. El comando anterior generalmente funciona para mí, pero acabo de probar en un commit sin una segunda línea vacía. Obtuve el mismo resultado que tú: todo el mensaje en una línea.

La segunda línea vacía es un estándar en los mensajes de confirmación de git. El comportamiento que ve probablemente se implementó a propósito.

La primera línea de un mensaje de confirmación debe ser una breve descripción. Si no puede hacerlo en una sola línea, puede usar varias, pero git considera que todo antes de la primera línea vacía es la "descripción breve". onelineimprime la descripción corta completa, por lo que todas sus 3 filas.

Gauthier
fuente
¡Gracias! Usted resolvió el misterio: no tengo una línea vacía después de la primera línea en mi mensaje de confirmación para separar el asunto del resto. Sin embargo, sería bueno si pudiera ponerlo o dejarlo en libertad.
JJD
1
No hay problema. De hecho, eres libre de tener la línea vacía o no. Solo que todo su mensaje se convierte en un mensaje corto si lo deja fuera. Me gusta esta breve descripción / descripción detallada, y supongo que estar limitado a una línea para la breve descripción fue un problema, de ahí el requisito de línea vacía. Siempre puede canalizar la salida git loga un script de filtrado, pero realmente recomendaría escribir una breve descripción con una línea vacía.
Gauthier
89
También hay git log --oneline --oneline es una taquigrafía integrada para "--pretty = oneline --abbrev-commit" que se usan juntos.
Jeremy Logan
¿Cómo deshacerse del hashtag acortado antepuesto? No es que no sea muy bonito. Pero sin cut. Eso estaría bien awk... (Por cierto, matemática P: ¿cuál es la probabilidad de que el siguiente bit en una secuencia huffman codificada correctamente, en el nivel de almacenamiento, esté activado o desactivado? Sugerencia: es === 50%.)
Phlip
77
eso fue todo tx. Ah, también, tengo una página llena de s, así que naturalmente agregué un %for '%s'. C-;
Phlip
158

¿Hace git log --onelinelo que quieres?

9000
fuente
1
No quiero que todo el mensaje de confirmación se fusione en una línea. Quiero ver solo la primera línea de cada mensaje de confirmación.
JJD
41

Mejor y más fácil git log haciendo un alias . Pegue el siguiente código en el terminal solo una vez para una sesión. Pegue el código en el perfil zshrc o bash para que sea persistente.

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

Salida

git lg

Salida de líneas cambiadas

git lg -p

Alternativamente (recomendado)
pegue este código en el archivo global .gitconfig

[alias]
  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

Otras lecturas.
https://coderwall.com/p/euwpig/a-better-git-log
Lectura avanzada.
http://durdn.com/blog/2012/11/22/must-have-git-aliases-advanced-examples/

atilkan
fuente
El ejemplo es una buena demostración de formato bonito, pero "Pegar el código a continuación en el terminal solo una vez" parece incorrecto porque no crea un alias para "git lg"
Drone2537
Nota para otros, si coloca este comando en lote, reemplace% con %%, reemplace 'con "" resultado = git log --color --graph --pretty=format:"%%Cred%%h%%Creset -%%C(yellow)%%d%%Creset %%s %%Cgreen(%%cr) %%C(bold blue)<%%an>%%Creset" --abbrev-commit %1. También puede pasar -p a este archivo bat para obtener líneas cambiadas
Dheeraj Bhaskar
30

Esto imprimirá solo el mensaje (solo el asunto) sin hash :

git log --pretty=format:%s
tecnófilo
fuente
3
%spara el sujeto; %bpara el cuerpo; %Bpara ambos ("cuerpo en bruto" en git-scm.com/docs/pretty-formats )
Mathieu CAROFF
25

Puede definir un alias global para poder invocar un registro corto de una manera más cómoda:

git config --global alias.slog "log --pretty=oneline --abbrev-commit"

Luego puede llamarlo usando git slog(incluso funciona con autocompletado si lo tiene habilitado).

Ese chico brasileño
fuente
8

Sin mensajes de confirmación, solo el hash:

git log --pretty=oneline | awk '{print $1}'
otiai10
fuente
77
Si solo quieres el hash ...git log --pretty=format:"%H"
michael_j_ward
Si solo quieres el hash, también puedes usarlo git rev-list HEAD.
Fabio dice reinstalar a Monica el
-8

si desea usar siempre git logde tal manera, puede agregar alias git

git config --global alias.log log --oneline

después de eso git logimprimirá lo que normalmente sería impreso porgit log --oneline

ruidoso
fuente
12
En realidad, esto no funciona, porque (A. los alias git no pueden anular los nombres de los comandos integrados) y (B. Es necesario que haya comillas "log --oneline").
Max Nanasy