Affiche le message de validation d'un commit donné dans git

244

J'ai besoin d'une commande de plomberie pour imprimer le message de validation d'un commit donné - rien de plus, rien de moins.

Mark Probst
la source
3
Si quelqu'un vient ici à la recherche d'un moyen d'imprimer un message de validation sur une seule ligne mais ne se soucie pas du hachage apparaissant au début, cela fonctionne:git show -s --oneline <commit>
waldyrious
Où devrions-nous ajouter la ligne pour imprimer le message de validation sur la machine serveur? Je voulais dire quel fichier de crochet?
Qu'entendez-vous par commande "plomberie"?
Bryan Ash

Réponses:

332

Ce n'est pas de la "plomberie", mais ça fera exactement ce que vous voulez:

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

Si vous avez absolument besoin d'une commande "plomberie" (vous ne savez pas pourquoi c'est une exigence), vous pouvez utiliser rev-list:

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

Bien rev-listqu'imprimera également le commit sha (sur la première ligne) en plus du message de commit.

mipadi
la source
4
Fonctionne parfaitement pour moi - mais j'ai utilisé à la %s%bplace de %B(sur une boîte Linux)
adamk
17
%Best un spécificateur correct (au moins, dans Git 1.7.2, je ne sais pas quand il a été ajouté).
mipadi
2
%Ba été ajouté quelque temps après la 1.7.1 (probablement en 1.7.1.1).
mipadi
1
En effet c'est - Git 1.7.2 apparemment. Merci beaucoup!
Mark Probst
Vous pouvez également utiliser: $ git log --format=%B -n 1 <commit> | cat -Cela vous donnera le message de validation et pas de validation sha, et vous pouvez le "pipe". J'utilise en fait cela dans le cadre de mon script CI.
Paulo Muñoz
138

git showest plus une commande de plomberie que git log, et a les mêmes options de formatage:

git show -s --format=%B SHA1
CharlesB
la source
9
Et si vous voulez juste la première ligne ("sujet"), utilisez à la %splace de %B.
ntc2 du
13
(Je préfère cela à la réponse acceptée "log" ou "rev-list", car il s'agit d'une opération de validation unique, plutôt que d'une liste limitée à 1 entrée.)
Rich
17

Pas de plomberie, mais je les ai dans mon .gitconfig:

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

C'est "dernier résumé" et "dernier message". Vous pouvez fournir une validation pour obtenir le résumé ou le message de cette validation. (J'utilise 1.7.0.5 donc je n'ai pas% B.)

bstpierre
la source
Vous pouvez passer l'argument -n comme paramètre. Ainsi, au lieu de ne renvoyer que le dernier commit, vous pouvez le faire renvoyer les 5 derniers commits. Ici, le changement nécessaire lsum = "! F () {git log -n $ 1 --pretty = format: '% s';}; f" lmsg = "! F () {git log -n $ 1 --pretty = format : '% s% n% n% b';}; f "Trouvé ici stackoverflow.com/questions/7005513/… Vous venez d'exécuter ce git lsum 5
kuklei
15

Cela vous donnera une liste très compacte de tous les messages pour une heure spécifiée.

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

J'ai commencé à utiliser

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

Cela semble être plus rapide que

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

Les deux donnent le même résultat

non
la source
1
Cela ne montre que la première ligne (% s), pas tout le message de validation ("rien de plus, rien de moins", comme l'a écrit le demandeur). Si vous avez un moyen de faire show-branch avec% B, alors ce serait utile.
Canonical Chris
3

J'utilise shortlog pour cela:

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