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


当前回答

我将如何在python中实现(基于@kenorb的bash答案)

def get_git_sha():
    # Which branch are we on?
    branch = open(".git/HEAD", "r").read()

    # Parse output "ref: refs/heads/my_branch" -> my_branch
    branch = branch.strip().split("/")[-1]

    # What's the latest commit in this branch?
    return open(f".git/refs/heads/{branch}").read().strip()

其他回答

要获取完整的SHA:

$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537

要获取缩短版本:

$ git rev-parse --short HEAD
cbf1b9a

我需要一些更不同的东西:显示提交的完整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 rev list--max count=1 HEAD

以下是Bashshell中使用直接从git文件读取的一行代码:

(head=($(<.git/HEAD)); cat .git/${head[1]})

您需要在git根文件夹中运行上述命令。

当您有存储库文件,但尚未安装git命令时,此方法很有用。

如果不起作用,请检查.git/refs/heads文件夹中您有什么样的头。

要将任何扩展对象引用转换为哈希,请使用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。