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

Mar*_*bst 213 git commit-message

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

mip*_*adi 293

它不是"管道",但它会完全符合您的要求:

$ git log --format=%B -n 1 <commit>
Run Code Online (Sandbox Code Playgroud)

如果你绝对需要一个"管道"命令(不确定为什么这是一个要求),你可以使用rev-list:

$ git rev-list --format=%B --max-count=1 <commit>
Run Code Online (Sandbox Code Playgroud)

虽然rev-list除了提交消息之外还会打印出提交sha(在第一行).

  • `%B`是一个正确的说明符(至少在Git 1.7.2中,不确定它何时添加). (16认同)
  • 为我完美工作 - 但我使用`%s%b`而不是'%B`(在Linux机器上) (4认同)
  • 可以在此处找到占位符列表:https://git-scm.com/docs/pretty-formats (3认同)
  • 在%1.7.1之后的某个时间(可能在1.7.1.1中)添加了`%B`. (2认同)
  • 确实是 - Git 1.7.2 显然。谢天谢地! (2认同)
  • 你也可以使用:`$ git log --format=%B -n 1 &lt;commit&gt; | cat -` 这会给你提交信息而不是提交信息,你可以“管道”它。我实际上使用它作为我的 CI 脚本的一部分。 (2认同)
  • 我更喜欢“%s”而不是“%B”,因为它只打印提交消息主题,而不打印正文(扩展描述)(如果提供) (2认同)
  • @AndrewSpencer,没有进行广泛的测试,但“git log”看起来较慢 (2认同)

Cha*_*esB 121

git show更像是一个管道命令git log,并且具有相同的格式选项:

git show -s --format=%B SHA1
Run Code Online (Sandbox Code Playgroud)

  • (我更喜欢这个被接受的"log"或"rev-list"答案,因为它是单一提交操作,而不是限制为1个条目的列表.) (12认同)
  • 如果你只想要第一行("主题"),请使用`%s`而不是'%B`. (9认同)
  • 我认为您做出的假设是,因为“rev-list”有“max-count”选项,而“show”没有“rev-list”正在迭代整个树或执行计算密集型操作。但你不能基于公共 API 对内部工作方式做出这样的假设。`git show` 是一个瓷器命令,没有深入挖掘,我假设它使用与 `rev-list` 完全相同的机制,以及一大堆其他*用户友好的*操作,这些操作会减慢它的速度。Porcelain 命令未针对速度进行优化 (2认同)

Har*_*eta 15

这将为您提供任何指定时间内所有消息的紧凑列表.

git log --since=1/11/2011 --until=28/11/2011 --no-merges --format=%B > CHANGELOG.TXT
Run Code Online (Sandbox Code Playgroud)


bst*_*rre 14

不管道,但我在.gitconfig中有这些:

lsum = log -n 1 --pretty=format:'%s'
lmsg = log -n 1 --pretty=format:'%s%n%n%b'
Run Code Online (Sandbox Code Playgroud)

那是"最后的总结"和"最后的消息".您可以提交提交以获取该提交的摘要或消息.(我使用的是1.7.0.5所以没有%B.)


nos*_*nos 14

我开始使用

git show-branch --no-name <hash>
Run Code Online (Sandbox Code Playgroud)

好像比

git show -s --format=%s <hash>
Run Code Online (Sandbox Code Playgroud)

两者都给出相同的结果

我实际上写了一个小工具来查看我所有 repos 的状态。你可以在github上找到它。

在此处输入图片说明

  • 这仅显示第一行(%s),而不显示整个提交消息(正如提问者所写,“不多不少”)。如果您有办法使用 %B 进行显示分支,那么这会很有帮助。 (2认同)

Cer*_*vEd 11

使用 git-rev-list 打印提交消息

git-rev-list是让您打印提交消息的管道命令。

像这样使用它。

git rev-list --max-count=1 --no-commit-header --format=%B <commit>
Run Code Online (Sandbox Code Playgroud)
  • --max-count=1:我们只对一项提交感兴趣
  • --no-commit-header: 不显示默认的提交头
  • --format=%B:显示消息(主题%s+ %n%n+ 正文%b
  • <commit>: shaHEAD、、等branch-nametag-namebranch1...branch2

git log它比或快很多git show