永久修复分支名称和提交哈希之间的歧义

时间:2019-08-15 03:22:45

标签: git

所以我有一些git存储库:

git init
echo "Recipes" > README
git add README

然后我建立一个名为“牛肉”的分支来存储我所有的牛排食谱:

git checkout -b beef

过了一会儿,然后有人进行了提交:

GIT_AUTHOR_DATE='Tue Jan 1 00:00:00 2019 -0400' \
GIT_COMMITTER_DATE='Tue Jan 1 00:00:00 2019 -0400' \
GIT_COMMITTER_NAME='Chef' \
GIT_COMMITTER_EMAIL='<chef@localhost>' \
GIT_AUTHOR_NAME='Chef' \
GIT_AUTHOR_EMAIL='<chef@localhost>' \
git commit -m "New recipe:00100011000001010000000010100000"
git checkout -b master

哦,哦……提交哈希以beef开头! [1]现在,每次我想切换到牛肉分支时,都会收到以下令人讨厌的消息:warning: refname 'beef' is ambiguous.

更糟糕的是,如果我将存储库克隆到其他地方,并尝试首次签出牛肉分支,我最终会在牛肉提交上遇到一个孤立的头!当然,我可以通过git checkout --track origin/beef而不是git checkout beef来解决此问题,但是现在我需要告诉所有使用我的项目的人这种特殊的解决方法。

所以,长话短说,我的问题是:我有一个带有git commit前缀的歧义分支。我怎么能一劳永逸地告诉git,当我说beef时,我总是要引用分支,而不是提交?理想情况下,这对下载存储库的任何人都应该有效,但是即使是仅在本地有效的修复程序也不错。

限制:

  • 我无法重命名/删除分支。其他人使用该项目,他们希望分支在那里并且被命名为牛肉。
  • 我无法修改/删除有问题的提交,因为它已被推送到共享存储库中。
  • 我真的不希望像this question中提到的那样,需要在每次使用Beef分支时都要键入的临时替代方法,我想要一种能够一劳永逸地解决此问题的方法。

[1]我花了太长时间试图使该提交具有以牛肉开头的可重现哈希值。但是,是的,这是从我在一个实际存储库中看到的示例派生而来的(为保护无辜者,更改了分支名称)。

1 个答案:

答案 0 :(得分:2)

目前似乎不容易解决。

我检查过将core.abbrev设置为更高的数字(例如比分支名称长度大8或10或...)不会阻止该警告。

Git 2.23命令 git switch 可能会缓解该问题,因为它仅切换分支(而git restore会还原{ {3}},因此仍然会受到影响,因为树可以由提交或分支引用)

我刚刚对其进行了测试:该警告仍然存在,但至少您只能切换到分支机构,因此不会造成混淆。


注意:正如我在“ tree content”中提到的那样,您可以使用How would Git handle a SHA-1 collision on a blob?来强制提交到特定的SHA1 前缀

相关问题