Git日志仅显示一个提交ID。

107
我需要一些帮助。有可能只显示一个提交ID吗?因为git log -3会显示从1到3的日志,我只想显示第3个。有什么可能的命令可以匹配吗?
我使用的命令是:
git log -3 --pretty=format:"%h"

结果是
ffbef87
cf0e073
1c76c5d

我只想显示1c76c5d
3个回答

114
你可以使用git show引用第三个父提交从当前提交(即距离HEAD的第二个祖先)开始。此外,git show接受与git log相同的格式字符串:
git show HEAD~2 --pretty=format:"%h" --no-patch

更新 (2016-12-01)

更好的方法是使用 rev-parse plumbing命令 ,并使用 --short 选项输出缩写(7个字符)的提交 SHA-1:

git rev-parse --short HEAD~2

或者您也可以指定完整的提交 SHA-1 长度:

git rev-parse --short=4 HEAD~2

1
当我使用git show head3 --pretty=format:"%h" --no-patch时,它会显示fatal: ambiguous argument 'HEAD3': unknown revision or path not in the working tree。 请使用'--'将路径与修订版本分开,像这样: 'git <command> [<revision>...] -- [<file>...]' - rkevx21
1
head~2 是你的历史记录中第一个提交吗? - Enrico Campidoglio
1
@KasunSiyambalapitiya 因为git show还会输出与提交相关的差异(即_patch_),但在这种情况下我们对此不感兴趣。 - Enrico Campidoglio
2
@GitSyncApp --no-patch 可以抑制 git show 的差异输出。 - Enrico Campidoglio
我必须执行 git rev-parse --short HEAD~1 而不是 2 来获取最新合并的主分支提交 ID。 - AhmFM
显示剩余7条评论

31

有一个工具可以做到这一点:

git log -3 --pretty=format:"%h" | tail -n 1

使用以下标记,您可以包括散列(而不是默认值)的n个字符:

--abbrev=n 

Unix哲学中的相关要素

1) 让每个程序只做一件事情。为了完成新的任务,请重新构建,而不是通过添加新的“功能”使旧程序复杂化。

2) 预期每个程序的输出将成为另一个尚未知晓的程序的输入。不要在输出中混杂无关信息。严格避免列格式或二进制格式的输入。不需要交互式输入。

... [即]

  • 编写能够很好地完成单一任务的程序。
  • 编写程序以便它们能够互相协作。

https://zh.wikipedia.org/wiki/Unix哲学


14

自 Git 2.3.8 版起,您可以使用 --skip 选项:

   git log -1 --skip 2 --pretty=format:"%h"

不确定 Git 的哪些早期版本支持 --skip 参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接