所以我有一些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
时,我总是要引用分支,而不是提交?理想情况下,这对下载存储库的任何人都应该有效,但是即使是仅在本地有效的修复程序也不错。
限制:
[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 前缀。