在格式中使用%h时,git是否缩写了SHA-1哈希?

时间:2014-07-21 01:07:01

标签: git

我知道以下内容将自动扩展SHA-1哈希值,因为git文档说明了这一点:

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

但如果有多个具有相同前7个字符的哈希,以下内容是否也会扩展打印的哈希值?

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

尽管上面只输出了最新的提交,但我希望它能确保短SHA-1哈希只要在本地存储库的所有提交中都是唯一的。这是真的吗?

1 个答案:

答案 0 :(得分:5)

是的,它会打印每个SHA-1的明确缩写,必要时使用超过7个字符。

git本身的git repo git://git.kernel.org/pub/scm/git/git.git,目前有4对具有相同7位SHA-1哈希的提交:

191f24171718e894cb5ba806bc45861ebac95e96
191f241b528c10e242d045bde2cef70fb013a6e5

2e6e3e829f3759823d70e7af511bc04cd05ad0af
2e6e3e82ee36b3e1bec1db8db24817270080424e

3b130ade45c70af63c7692387b65f161770a8ccc
3b130adf9c8b0b37acb0959b84a3222bc22ebcff

d53a35020d380c199b010c9884ab15995f8e982b
d53a35032a67fde5b59c8a6a66e0466837cbaf1e

看哪:

$ git log -a --pretty=format:%h%n | egrep '398dd4b|d53a350'
398dd4b
d53a3503
d53a3502
$ 

如您所见,它为commit

打印了一个7位数的缩写
398dd4bd039680ba98497fbedffa415a43583c16

(恰好是目前master分支上的最新提交),但是提交的8位缩写

d53a35020d380c199b010c9884ab15995f8e982b
d53a35032a67fde5b59c8a6a66e0466837cbaf1e

(7个字符的缩写不明确)。

(这个答案的前一版本提到在命令行中给出一个模糊的7字符缩写,如git log -n 1 d53a350,会产生错误信息。这是正确的,但它没有回答实际的问题。)