如何获取Git中当前提交的哈希?


当前回答

我需要一些更不同的东西:显示提交的完整sha1,但如果工作目录不干净,则在末尾添加星号。除非我想使用多个命令,否则前面答案中的选项都不起作用。

这是一个可以:git-descripte--always--abbrev=0--match“NOT A TAG”--dirty=“*”结果:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe*

说明:描述(使用带注释的标记)当前提交,但仅使用包含“NOT A TAG”的标记。由于标记不能有空格,因此这永远不会与标记匹配,并且因为我们希望显示一个结果——始终,命令会返回显示提交的完整(--abbrev=0)sha1,如果工作目录是--dirty,则会附加一个星号。

如果您不想附加星号,这与前面回答中的所有其他命令一样:git-descripte--always--abbrev=0--match“NOT A TAG”结果:f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe

其他回答

为了完整起见,因为还没有人提出过。git/refs/heads/master是一个只包含一行的文件:master上最新提交的哈希。所以你可以从那里读出来。

或者,作为命令:

cat .git/refs/heads/master

更新:

注意,git现在支持将一些head-ref存储在pack-ref文件中,而不是作为/refs/heads/文件夹中的文件。https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html

使用git rev list--max count=1 HEAD

要将任何扩展对象引用转换为哈希,请使用git-rev-parse:

git rev-parse HEAD

or

git rev-parse --verify HEAD

要检索短哈希:

git rev-parse --short HEAD

要将引用(例如分支和标记)转换为哈希,请使用git show ref和git for each-ref。

提交哈希

git show -s --format=%H

缩写的提交哈希

git show -s --format=%h

-s标志与--no补丁相同,代表“抑制差异输出”。

单击此处查看更多git显示示例。

下面是另一个直接访问实现:

head="$(cat ".git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(cat ".git/${head#ref: }")"
done

这也适用于http,这对本地包存档很有用(我知道:对于公共网站,不建议将.git目录设置为可访问):

head="$(curl -s "$baseurl/.git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(curl -s "$baseurl/.git/${head#ref: }")"
done