Imprimir mensaje de confirmación de una confirmación dada en git

244

Necesito un comando de plomería para imprimir el mensaje de confirmación de una confirmación determinada, nada más y nada menos.

Mark Probst
fuente
3
Si alguien viene aquí en busca de una manera de imprimir una sola línea al mensaje de confirmación, pero no se preocupa por el hash que aparece al principio, las siguientes obras:git show -s --oneline <commit>
waldyrious
¿Dónde debemos agregar la línea para imprimir el mensaje de confirmación en la máquina del servidor? Me refería a qué archivo de gancho?
¿Qué quiere decir con el comando "plomería"?
Bryan Ash

Respuestas:

332

No es "plomería", pero hará exactamente lo que quieras:

$ git log --format=%B -n 1 <commit>

Si necesita absolutamente un comando de "plomería" (no estoy seguro de por qué es un requisito), puede usar rev-list:

$ git rev-list --format=%B --max-count=1 <commit>

Aunque rev-listtambién imprimirá el commit sha (en la primera línea) además del mensaje de confirmación.

mipadi
fuente
44
Funcionó perfectamente para mí, pero lo usé en %s%blugar de %B(en una caja de Linux)
adamk
17
%Bes un especificador correcto (al menos, en Git 1.7.2, no estoy seguro de cuándo se agregó).
mipadi
2
%Bse agregó en algún momento después de 1.7.1 (probablemente en 1.7.1.1).
mipadi
1
De hecho lo es - Git 1.7.2 aparentemente. ¡Muchas gracias!
Mark Probst
También puede usar: $ git log --format=%B -n 1 <commit> | cat -Eso le dará el mensaje de confirmación y no confirmará sha, y puede "canalizarlo". De hecho, uso esto como parte de mi script de CI.
Paulo Muñoz
138

git showes más un comando de plomería que git log, y tiene las mismas opciones de formato:

git show -s --format=%B SHA1
CharlesB
fuente
99
Y si solo desea la primera línea ("asunto"), use en %slugar de %B.
ntc2
13
(Prefiero esto a la respuesta aceptada "log" o "rev-list", ya que es una operación de confirmación única, en lugar de una lista restringida a 1 entrada.)
Rico
17

No son fontanería, pero tengo estos en mi .gitconfig:

lsum = log -n 1 --pretty=format:'%s'
lmsg = log -n 1 --pretty=format:'%s%n%n%b'

Eso es "último resumen" y "último mensaje". Puede proporcionar una confirmación para obtener el resumen o el mensaje de esa confirmación. (Estoy usando 1.7.0.5, así que no tengo% B).

bstpierre
fuente
Puede pasar el argumento -n como parámetro. Entonces, en lugar de devolver solo la última confirmación, puede hacer que devuelva las últimas 5 confirmaciones. Aquí el cambio es necesario lsum = "! F () {git log -n $ 1 --pretty = format: '% s';}; f" lmsg = "! F () {git log -n $ 1 --pretty = format : '% s% n% n% b';}; f "Lo encontré aquí stackoverflow.com/questions/7005513 /... Acabas de ejecutar este git lsum 5
kuklei
15

Esto le dará una lista muy compacta de todos los mensajes para un tiempo específico.

git log --since=1/11/2011 --until=28/11/2011 --no-merges --format=%B > CHANGELOG.TXT
Harshniket Seta
fuente
4

Empecé a usar

git show-branch --no-name <hash>

Parece ser más rápido que

git show -s --format=%s <hash>

Ambos dan el mismo resultado

nos
fuente
1
Eso muestra solo la primera línea (% s), no todo el mensaje de confirmación ("nada más, nada menos", como escribió el autor de la pregunta). Si tiene una manera de hacer show-branch con% B, eso sería útil.
Canonical Chris
3

Yo uso shortlog para esto:

$ git shortlog master..
Username (3):
      Write something
      Add something
      Bump to 1.3.8 
mja
fuente