35

我目前正在使用以下内容获取某个提交哈希的提交消息:

hash='b55da97'
git log --pretty=oneline ${hash} | grep "${hash}" | awk '{ print $2 }'

不过,这些似乎效率极低。有没有更聪明或更便宜的方法来做到这一点,还是我被 grepping 和 awking 困住了?

4

5 回答 5

44

git log需要(除其他外):

  • -n num限制显示的提交数量:选择 1(如果num是 9 或更少,您可以只写,因此,简称)-num-1
  • --pretty=format:string with directives更改日志输出格式。该%s指令获取提交“主题”,这也是您使用oneline.

因此:git log -n 1 --pretty=format:%s $hash(or git log -1 --pretty=format:%s) 将在这里解决问题。

有关格式指令的完整列表,请参阅git log 文档,在“PRETTY FORMATS”下(大约一半)。

于 2013-11-05T21:26:47.507 回答
11

根据您实际需要多少提交消息,您可以使用几个漂亮的格式说明符:

      ·  %s: subject
      ·  %f: sanitized subject line, suitable for a filename
      ·  %b: body
      ·  %B: raw body (unwrapped subject and body)

所以类似git log -1 --pretty=format:%b <hash>, 或使用其他说明符之一(我认为%s可能更接近你现在正在做的事情)。-1仅限git log于一次提交,而不是遍历历史树。

于 2013-11-05T21:02:22.197 回答
8

我喜欢将重要的东西放在一行中......这是我使用的,基于此页面上的其他答案:

git_log_for_commit.sh

IT=$(git log -1 --pretty=format:"%an, %s, %b, %ai"  $*)
echo "$IT"

输出

jdoe, WORK1766032 - Added templating engine, WIP, 2013-08-15 14:25:59 +0000
于 2017-07-19T17:51:03.380 回答
2

比这里列出的更短的答案是

git log --pretty=oneline {your_hash} | grep {your_hash}

于 2019-02-13T21:03:09.213 回答
1

这可能会缩短一些

git log --pretty=oneline ${hash} | awk '$0~var {print $2}' var="${hash}"
于 2013-11-05T20:37:32.477 回答