我们的git存储库有一个名为HEAD的分支

时间:2013-05-06 18:15:23

标签: git git-branch

我最近注意到我们的git服务器有一个名为HEAD的分支。我试过在本地做这个,git警告我这是不明确的。通过删除/重命名这个分支,我们可能遇到任何潜在的可怕问题吗?

3 个答案:

答案 0 :(得分:3)

您的服务器应该有一个名为HEAD的分支指针,它将指向您的默认分支。默认情况下,git branch -r会向您显示:

origin/HEAD -> origin/master

答案 1 :(得分:2)

裸机壳有'HEAD'是正常的。请记住,HEAD不是正常分支,而是指向分支的指针。

  1. 对于非裸露的'HEAD',“分支”指向checked out branch
  2. 对于裸仓库,它指向默认分支,即当裸仓库克隆到非裸仓库时,分支检出为工作目录。通常它指向“主”,但你可以point it to a different branch

答案 2 :(得分:2)

创建一个名为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 co -b fubar
Switched to a new branch 'fubar'    

以上所有内容都是在OS X上通过Homebrew安装的git版本2.3.0。

很容易偶然输入上述许多调用,不幸的是,当在特殊含义不适用的地方指定HEAD(或FETCH_HEAD)时,Git不会快速失败。