【问题标题】:Print commit message of a given commit in git在 git 中打印给定提交的提交消息
【发布时间】:2011-03-22 09:35:36
【问题描述】:

我需要一个管道命令来打印一个给定提交的提交消息 - 不多也不少。

【问题讨论】:

  • 如果有人来这里寻找打印单行提交消息的方法,但不关心开头出现的哈希,则以下工作:git show -s --oneline <commit>
  • 我们应该在哪里添加行来打印服务器机器中的提交消息?我的意思是哪个钩子文件?
  • “管道”命令是什么意思?

标签: git commit-message


【解决方案1】:

这不是“管道”,但它会完全按照您的意愿行事:

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

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

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

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

【讨论】:

  • 非常适合我——但我使用 %s%b 而不是 %B(在 Linux 机器上)
  • %B 是一个正确的说明符(至少在 Git 1.7.2 中,不确定何时添加)。
  • %B 是在 1.7.1 之后的某个时间添加的(可能在 1.7.1.1 中)。
  • 确实是——显然是 Git 1.7.2。非常感谢!
  • 你也可以使用:$ git log --format=%B -n 1 &lt;commit&gt; | cat - 这会给你提交消息并且没有提交sha,你可以“管道”它。我实际上将它用作我的 CI 脚本的一部分。
【解决方案2】:

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

git show -s --format=%B SHA1

【讨论】:

  • 如果您只想要第一行(“主题”),请使用%s 而不是%B
  • (我更喜欢这个而不是接受的“log”或“rev-list”答案,因为它是一个单提交操作,而不是一个限制为 1 个条目的列表。)
  • @Rich 你这是什么意思?
  • @CervEd - 我的意思是“log”和“rev-list”命令对提交列表进行操作,这里的其他答案将列表限制为长度 1。这是不必要的间接级别和使事情复杂化。 git 中的“log”操作有点像“let xs = [123]; for (x in xs) { show(x) }”,但只做show(123) 更简单快捷。
  • 我认为您是在假设 rev-list 有一个 max-count 选项,而 show 并不是 rev-list 正在遍历整个树或执行计算密集型的操作。但是你不能对基于公共 API 的内部工作做出这样的假设。 git show 是一个瓷器命令,没有深入挖掘,我假设它使用与 rev-list 完全相同的机制以及一大堆其他 user-friendly 操作来减慢它.瓷器命令未针对速度进行优化
【解决方案3】:

没有管道,但我的 .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
【解决方案4】:

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

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

【讨论】:

    【解决方案5】:

    我开始使用

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

    好像比

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

    两者都给出相同的结果

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

    【讨论】:

    • 只显示第一行 (%s),而不是整个提交消息(“不多不少”,正如提问者所写)。如果您有办法使用 %B 进行 show-branch,那将很有帮助。
    【解决方案6】:

    我为此使用短日志:

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

    【讨论】:

      【解决方案7】:

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

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

      像这样使用它。

      git rev-list --format=%B --max-count=1 <commit> | tail +2
      
      • --format=%B:显示消息(主题%s + %n%n + 正文%b
      • --max-count=1:我们只对一个提交感兴趣
      • &lt;commit&gt;shaHEADbranch-nametag-namebranch1...branch2 等。
      • | tail +2: 第一行是commit sha,略过

      git loggit show 快很多。

      【讨论】:

      • 这不适用于合并提交,尽管它有两个父节点:您必须使用 tail +3
      • @leponzo,无赖。也许最好使用某种 sed 魔法来可靠地摆脱 shas
      【解决方案8】:

      在 git 中单独获取我的 Last Commit Message

      git log --format=%B -n 1 $(git log -1 --pretty=format:"%h") | cat -

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-07
        • 2021-03-06
        • 2013-12-24
        • 1970-01-01
        • 2012-05-04
        • 2015-11-09
        • 2019-10-25
        • 2015-10-30
        相关资源
        最近更新 更多