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


当前回答

在gitbash上,只需运行$git日志-1

您将看到,这些行遵循您的命令。

commit d25c95d88a5e8b7e15ba6c925a1631a5357095db .. (info about your head)

d25c95d88a5e8b7e15ba6c925a1631a5357095db, is your SHA for last commit.

其他回答

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

要获取完整的SHA:

$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537

要获取缩短版本:

$ git rev-parse --short HEAD
cbf1b9a

我知道的最简洁的方式是:

git show --pretty=%h 

如果您需要哈希的特定位数,可以添加:

--abbrev=n

如果你想要超级黑客的方式:

cat .git/`cat .git/HEAD | cut -d \  -f 2`

基本上,git将HEAD的位置存储在.git/HEAD中,格式为ref:{path from.git}。此命令将读取该位置,将“ref:”切片,并读取它指向的任何文件。

当然,这在分离头模式下会失败,因为head不会是“ref:…”,而是哈希本身-但你知道,我认为你不会期望在bash一行中有那么多聪明。如果你不认为分号是作弊的话。。。

HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \  -f 2)")"; done; echo $HASH

为了完整起见,因为还没有人提出过。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