获取简短的Git版本哈希


381

有没有一种更干净的方法来HEAD从Git 获取短版本哈希?

我希望看到与从中得到的输出相同的输出:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

我最初使用上面的命令来生成版本字符串,但这甚至更好:

git describe --tags

它将输出类似0.1.12(标记提交)或0.1.11-5-g0c85fbc(标记之后的五个提交)的字符串。


2
由于您似乎擅长使用管道等处理数据,因此您应该了解git aliases。在这种情况下,有一个命令用于您想要的内容(请参阅答案),但是最终您会找到不需要的内容,而别名对此非常有用。
MatrixFrog 2011年

@ MatrixFrog感谢您的提示!我已经有一些简单的git别名了,但是直到现在我都不知道它们有多强大。我特别喜欢graphviz显示。
Attila O.

1
嗯 当我运行时git describe --tags,收到消息“致命:找不到名称,无法描述任何内容”。
Quinn Comendant

@QuinnComendant您可能需要先标记一些内容--tags才能工作。首先尝试创建标签;例如git tag 1.0.0
Attila O.

Answers:


696

尝试这个:

git rev-parse --short HEAD

该命令git rev-parse可以完成许多不同的事情,因此您需要非常仔细地阅读文档以发现问题。


4
您可以执行以下操作,并通过执行以下操作从短提交哈希中获取长提交哈希git rev-parse HEAD
Andy

9
该命令还与有拷贝粘贴来自其他来源,如长转的ID git log,如git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18f回报97dd2ae
chiborg

3
它仅适用于引用。您可以使用HEAD,标记名称,分支名称或普通哈希。
d12frosted 2016年

1
警告,这将返回7个字符的提交哈希(默认情况下),而gitlab之类的许多地方都使用8个字符!
masterxilo

3
您可以git rev-parse --short=8 HEAD用来获取GitLab使用的8个字符的长度。您还可以core.abbrev使用诸如git config core.abbrev 8 Source
n8felton 19/11/25


70
git log -1 --abbrev-commit

也会做到的。

git log --abbrev-commit

将列出带有缩写的SHA-1校验和的日志条目。


1
第二个正是我想要的!非常简单易记,在日常生活中很有用。
iFreilicht

也可与配合使用git log --pretty=oneline,这与不同--oneline,否则会打印完整尺寸的哈希。
sdaau

46

查看Git commit简短版本和Git commit消息的一种简单方法是:

git log --oneline

请注意,这是

git log --pretty=oneline --abbrev-commit

1
--oneline是最佳选择
Juan Ignacio

1
@JuanIgnacioBarisich最佳选择取决于您需要查看的信息量。如果需要更多信息,例如作者或日期,那么git log --abbrev-commit是一个更好的选择。还记录--pretty可能是选择记录哪些信息的更好选择
速度

35

一个非常简单的方法是:

git describe --always

1
哈,贴心的,解决了git describe否则会失败的情况(因为describe期望历史中某个地方有标签)thx
敏锐的

8
如果您严格希望使用短哈希,那就不好了-因为这可以返回带注释的标记,如果有的话。
Zitrax

在某些情况下git describe --long可能会有所帮助。从文档中:“ 即使匹配标签,也始终输出长格式(标签,提交次数和缩写的提交名称)。” [我的重点]
djvg

使用--long效果更好,但有时会得到一个短哈希,有时会用连字符将3项分开。这些天,我使用公认的答案。过去,我不知道带注释的标签-也许它们甚至不存在!
史蒂文·肖

16

带有短哈希和最后评论的分支:

git branch -v

  develop      717c2f9 [ahead 42] blabla
* master       2722bbe [ahead 1] bla

10

我的Git版本2.7.4具有以下设置:

git config --global log.abbrevcommit yes
git config --global core.abbrev 8

现在,当我这样做时:

git log --pretty=oneline

我得到一个八位数的缩写提交ID:

ed054a38 add project based .gitignore
30a3fa4c add ez version
0a6e9015 add logic for shifting days
af4ab954 add n days ago
...

1
尽管此代码可以回答问题,但提供有关如何以及为什么解决问题的其他上下文将提高​​答案的长期价值。
SherylHohman

1
好点子。感激,雪儿
往下流

1

那这个呢 :

git log --pretty="%h %cD %cn %s"  

它显示出类似的东西:

674cd0d 2019年11月20日星期三12:15:38 +0000 Bob提交消息

看到漂亮的格式文档在这里输入链接描述

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.