在git中打印给定提交的提交消息


243

我需要一个管道命令来打印一个给定提交的提交消息-仅此而已。


3
如果有人来这里寻找打印单行提交消息的方式,但不关心开头出现的哈希,则可以执行以下操作:git show -s --oneline <commit>
waldyrious

我们应该在哪里添加行以在服务器计算机上打印提交消息?我的意思是哪个钩文件?

“管道”命令是什么意思?
布莱恩·阿什

Answers:


331

它不是“管道”,但可以完全满足您的要求:

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

如果您绝对需要“管道”命令(不确定为什么要这样做),则可以使用rev-list

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

尽管rev-list除了提交消息外,还将打印出提交信息(在第一行)。


4
对我来说非常完美-但我使用它%s%b代替%B(在Linux机器上)
adamk

17
%B是正确的说明符(至少在Git 1.7.2中,不确定何时添加)。
mipadi

2
%B在1.7.1(可能是1.7.1.1)之后的某个时间添加了。
mipadi

1
确实是-显然是Git 1.7.2。Muchas gracias!
Mark Probst'7

您还可以使用:$ git log --format=%B -n 1 <commit> | cat -这将为您提供提交消息,而没有提交sha,您可以对其进行“管道传输”。实际上,我将此作为CI脚本的一部分。
PauloMuñoz16年

137

git show比更具说服力git log,并且具有相同的格式选项:

git show -s --format=%B SHA1

9
并且,如果您只想要第一行(“主题”),请使用%s代替%B
ntc2 2014年

13
(我更喜欢接受已接受的“ log”或“ rev-list”答案,因为它是一次提交操作,而不是仅限于1个条目的列表。)
2015年

17

没有管道,但是我的.gitconfig中有这些:

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

那就是“最后的摘要”和“最后的消息”。您可以提供提交以获取该提交的摘要或消息。(我使用的是1.7.0.5,所以没有%B。)


您可以将-n参数作为参数传递。因此,您可以使其返回最后5次提交,而不仅仅是返回最后一次提交。这里需要更改lsum =“!f(){git log -n $ 1 --pretty = format:'%s';}; f” lmsg =“!f(){git log -n $ 1 --pretty = format :'%s%n%n%b';}; f“在这里找到它stackoverflow.com/questions/7005513/… 您只运行了git lsum 5
kuklei


4

我开始使用

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

它似乎比

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

两者给出相同的结果


1
那仅显示第一行(%s),而不显示整个提交消息(如问询者所写,“没事,没事”)。如果您可以使用%B进行显示分支,那么这将很有帮助。
规范克里斯

3

我为此使用shortlog:

$ git shortlog master..
Username (3):
      Write something
      Add something
      Bump to 1.3.8 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.