Stampa il messaggio di commit di un determinato commit in git


244

Ho bisogno di un comando idraulico per stampare il messaggio di commit di un determinato commit - niente di più, niente di meno.


3
Se qualcuno viene qui alla ricerca di un modo per stampare un messaggio di commit a riga singola ma non si preoccupa dell'hash che appare all'inizio, i seguenti lavori:git show -s --oneline <commit>
waldyrious

Dove dovremmo aggiungere la riga per stampare il messaggio di commit nel server? Intendevo quale file hook?

Cosa intendi con comando "idraulico"?
Bryan Ash,

Risposte:


332

Non è "idraulico", ma farà esattamente quello che vuoi:

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

Se hai assolutamente bisogno di un comando "idraulico" (non sei sicuro del perché sia ​​un requisito), puoi usare rev-list:

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

Anche se rev-liststamperà anche il commit sha (sulla prima riga) oltre al messaggio di commit.


4
Ha funzionato perfettamente per me - ma l'ho usato %s%binvece di %B(su un box Linux)
adamk il

17
%Bè un identificatore corretto (almeno, in Git 1.7.2, non sicuro di quando è stato aggiunto).
mipadi,

2
%Bè stato aggiunto qualche tempo dopo l'1.7.1 (probabilmente nell'1.7.1.1).
mipadi,

1
In effetti lo è - apparentemente Git 1.7.2. Molte grazie!
Mark Probst,

Puoi anche usare: $ git log --format=%B -n 1 <commit> | cat -Questo ti darà il messaggio di commit e nessun commit sha, e puoi "pipe". In realtà lo uso come parte del mio script CI.
Paulo Muñoz,

138

git showè più un comando idraulico di git log, e ha le stesse opzioni di formattazione:

git show -s --format=%B SHA1

9
E se vuoi solo la prima riga ("soggetto"), usa %sinvece di %B.
ntc2,

13
(Preferisco questo alla risposta accettata "log" o "rev-list", in quanto si tratta di un'operazione di commit singolo, piuttosto che di un elenco limitato a 1 voce.)
Rich

17

Non idraulico, ma ho questi nel mio .gitconfig:

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

Questo è "ultimo riepilogo" e "ultimo messaggio". È possibile fornire un commit per ottenere il riepilogo o il messaggio di quel commit. (Sto usando 1.7.0.5, quindi non ho% B.)


È possibile passare l'argomento -n come parametro. Quindi, invece di restituire solo l'ultimo commit, puoi farlo per restituire gli ultimi 5 commit. Qui la modifica necessaria lsum = "! F () {git log -n $ 1 --pretty = format: '% s';}; f" lmsg = "! F () {git log -n $ 1 --pretty = format : '% s% n% n% b';}; f "L'ho trovato qui stackoverflow.com/questions/7005513/… Hai appena eseguito questo git lsum 5
kuklei il

15

Questo ti darà un elenco molto compatto di tutti i messaggi per un periodo di tempo specificato.

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

4

Ho iniziato a usare

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

Sembra essere più veloce di

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

Entrambi danno lo stesso risultato


1
Ciò mostra solo la prima riga (% s), non l'intero messaggio di commit ("niente di più, niente di meno", come ha scritto il richiedente). Se hai un modo di fare show-branch con% B, sarebbe utile.
Canonico Chris,

3

Uso shortlog per questo:

$ git shortlog master..
Username (3):
      Write something
      Add something
      Bump to 1.3.8 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.