即使"HEAD"对于Git分支的名称来说绝对是一个糟糕的选择,它仍然是一个有效的分支名称.如果你碰巧有一个名为"HEAD"的分支,有没有办法如何明确地引用实际的HEAD符号引用?
分支可以被引用refs/heads/HEAD,但HEAD它本身呢?
只使用a 作为参数传递的任何地方都会HEAD导致refname 'HEAD' is ambiguous错误<commit>.
根据gitrevisions,如果 和HEAD都refs/heads/HEAD存在,则选定的修订版是HEAD(即不是名为 的分支HEAD)。
这实际上是大多数情况下的正确答案,但git checkout更喜欢分支名称而不是修订版本,因此git checkout HEAD解析为分支,而不是当前提交。
还有其他命令也选择分支名称,例如,git branch -f HEAD newrev或git branch -D HEAD引用分支,但这里没有真正的歧义空间:显然git branch将在分支上工作。
其他处理程序通常将分支名称或修订说明符传递给git rev-parse或git rev-list,并且这些处理程序的行为如gitrevisions中记录的那样。
请注意,更实际的分支名称可能会出现类似的情况。就在昨天,我创建了一个分支来处理某些以太网项目,并将该分支命名为e1000...,看起来像缩写的 SHA-1。一个名为的分支也facade遭受同样的命运。