对git使用与其他命令相同的提交缩写长度

对git使用与其他命令相同的提交缩写长度,git,git-blame,Git,Git Blame,git-burn命令显示的提交哈希值缩写为比其他命令长一个字符的长度。例如: $ git log --oneline 9fb6f706 (HEAD -> master) second commit 0af747a8 first commit $ git blame foo 9fb6f7064 (gilles 2020-11-15 12:28:09 +0100 1) revised ^0af747a8 (gilles 2020-11-15 12:27:41 +0100 2

git-burn
命令显示的提交哈希值缩写为比其他命令长一个字符的长度。例如:

$ git log --oneline       
9fb6f706 (HEAD -> master) second commit
0af747a8 first commit
$ git blame foo   
9fb6f7064 (gilles 2020-11-15 12:28:09 +0100 1) revised
^0af747a8 (gilles 2020-11-15 12:27:41 +0100 2) world
我经常从
dull
输出中复制粘贴一个缩写哈希,并在日志中或在交互式重基中的提交集合中搜索它。但是由于缩略语在
git
输出中长了一个字符,我必须记住删除最后一个字符,否则搜索将无法找到任何内容

对于脚本,我会使用未加修饰的哈希和陶瓷格式。但对于交互式使用,我想使用缩写哈希

设置
core.abbrev
选项没有帮助:
git-burn
增加了一个选项。设置
core.abbrev
并调用
burn--abbrev
,使用一个少一个的值是可行的,但这不是一个好的解决方案,因为我失去了git的启发式方法来确定短提交ID的合适长度的好处,我必须显式地传递这个选项或使用不同的命令名作为别名


如何使一个普通的
git命令使用与其他git命令相同长度的缩写提交ID?

感谢您深入阅读源代码。恐怕您唯一的解决方案是定义自定义别名

git config --global alias.blame2 '!git -c core.abbrev=6 blame'

那很有趣…也许是个虫子?我可以用从源代码构建的最新Git来确认这种行为。你能把这个带到Git邮件列表吗?@knittl这是设计的:。但这只适用于一个极端情况,它基本上是无用的(边界提交可以通过其他方式识别),而且它很烦人,所以我正在寻找一个解决方法。鉴于源代码,看起来你真的无法绕过它(好吧,我想你可以使用一个别名来调用带有显式缩短的缩写计数的
git-dull
)。你可以试着养成总是从所有搜索中删除最后一个字符的习惯。:-)尽管我仍然不知道为什么durn(或durn中的“boundary-commits”)需要不同的缩写长度。只要abbrev有足够的数字,它就已经是唯一的了。我仍然建议将此信息带到Git邮件列表中,如中所述:边界提交显示为
^1234567
,而不是
12345678
,Git计算长度以确保
12345678
保证唯一,但
1234567
不保证唯一。我不相信这件小事值得费心,但我不得不接受它。@Gilles'SO-stopbeingevil':是的,但唯一性不受是否为边界提交的影响。7个字符足以保证唯一性,或者8个字符可以保证唯一性。无论提交的“边界性”如何,这都适用。如果7个字符不能唯一标识单个提交,即哈希前缀不明确,则即使对于
git log
,也必须显示7个以上的字符。