我们的git存储库有一个名为HEAD的分支
我最近注意到我们的git服务器有一个叫做HEAD的分支。我在本地尝试过这样做,git警告我这是不明确的。删除/重命名此分支是否会遇到任何潜在的可怕问题?您的服务器应该有一个名为我们的git存储库有一个名为HEAD的分支,git,git-branch,Git,Git Branch,我最近注意到我们的git服务器有一个叫做HEAD的分支。我在本地尝试过这样做,git警告我这是不明确的。删除/重命名此分支是否会遇到任何潜在的可怕问题?您的服务器应该有一个名为HEAD的分支指针,它将指向您的默认分支。默认情况下,git branch-r将显示以下内容: origin/HEAD -> origin/master 裸回购有“头”是正常的。请记住,HEAD不是一个普通的分支,而是一个指向分支的指针 对于非裸体,“头”的“分支”指向“头” 对于裸回购,它指向默认分支,即当裸回购
HEAD
的分支指针,它将指向您的默认分支。默认情况下,git branch-r
将显示以下内容:
origin/HEAD -> origin/master
裸回购有“头”是正常的。请记住,HEAD不是一个普通的分支,而是一个指向分支的指针
可以创建一个名为
HEAD
的远程分支,而且似乎不会特别有害:
~/code/foo/bar (master) $ git push origin master:HEAD
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:foo/bar
* [new branch] master -> HEAD
~/code/foo/bar (master) $ git branch -a
* master
remotes/origin/HEAD
remotes/origin/master
~/code/foo/bar (master) $ git push origin :HEAD
To git@github.com:foo/bar
- [deleted] HEAD
~/code/foo/bar (master) $ git branch -a
* master
remotes/origin/master
创建名为HEAD
的本地分支会产生更糟糕的效果:
~/code/foo/bar (master) $ git checkout -b HEAD
Switched to a new branch 'HEAD'
Your branch is up-to-date with 'origin/master'.
~/code/foo/bar (HEAD) $ git checkout -b fubar
warning: refname 'HEAD' is ambiguous.
fatal: Ambiguous object name: 'HEAD'.
~/code/foo/bar (HEAD) $ git branch -a
* HEAD
master
remotes/origin/master
~/code/foo/bar (HEAD) $ rm .git/refs/heads/HEAD
~/code/foo/bar (HEAD*) $ git checkout master
Switched to branch 'master'
所有这些都是通过OS X上的自制程序安装的git 2.3.0版
很容易意外地键入上述许多调用,不幸的是,当在特殊含义不适用的地方指定了HEAD
(或FETCH\u HEAD
)时,Git不会快速失败。编辑:较新版本的Git现在使用HEAD
会快速失败。例如,对于git版本2.22.0:
~/code/foo/bar (master) $ git checkout -b HEAD
fatal: 'HEAD' is not a valid branch name.
但是仍然允许使用名为
FETCH\u HEAD
的分支。你应该问创建分支的人:)那个人已经离开很久了:(分支上没有什么特别的东西(甚至在同一点上还有另一个分支!)我只是想知道,如果我尝试删除HEAD,GIT是否会发作。注意:在GIT 2.16中,名为HEAD的分支将不再可能(至少,您将无法创建新分支)。请看,这个答案并不能解释将分支称为“HEAD”可能产生的任何可怕后果这是因为这个答案假设没有人做过这样的事情,OP误解了git branch-r
@meagar的输出,我误解了输出。但是,可以创建一个名为head的分支,但不确定它有多危险。将分支称为“head”只要你不在Windows上就可以了。如果你在Windows上,那么你就注定要失败。我不想知道当你试图让分支末日,末日,末日,末日,末日,末日,末日,末日,末日,末日,末日,末日,末日,末日,末日,末日,末日,末日,最后在Windoom上末日。这个答案目前建议rm.git/refs/heads/heads;git co-b fubar
。如果您一个接一个地执行这些命令,fubar
将被创建,而您的工作目录仍处于与现在已删除的分支-HEAD
相对应的状态,并且没有历史记录,这几乎肯定没有意义。我认为这个答案应该建议rm.git/refs/heads/HEAD;git checkout master
作为回到坚实基础的一种方式,@Quuxplusone很公平;我相应地改变了它。我还添加了一个关于git新版本的注释,它不再允许创建名为HEAD的本地分支。