我知道以下内容将自动扩展SHA-1哈希值,因为git文档说明了这一点:
git log --abbrev-commit --pretty=oneline
但如果有多个具有相同前7个字符的哈希,以下内容是否也会扩展打印的哈希值?
git log -1 --pretty=format:"%h"
尽管上面只输出了最新的提交,但我希望它能确保短SHA-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
,会产生错误信息。这是正确的,但它没有回答实际的问题。)