6

我最近注意到我们的 git 服务器有一个名为 HEAD 的分支。我已经尝试在本地执行此操作,但 git 警告我这是模棱两可的。通过删除/重命名此分支,我们是否会遇到任何潜在的可怕问题?

4

3 回答 3

4

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

origin/HEAD -> origin/master
于 2013-05-06T18:19:18.110 回答
2

裸仓库有一个“HEAD”是正常的。请记住,HEAD 不是普通分支,而是指向分支的指针。

  1. 对于非裸机,“HEAD”“分支”指向已签出的分支
  2. 对于裸仓库,它指向默认分支,即当裸仓库克隆到非裸仓库时,该分支作为工作目录签出。它通常指向“master”,但您可以将它指向不同的分支
于 2013-05-06T18:42:52.313 回答
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 checkout master
Switched to branch 'master'

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

很容易意外地键入许多上述调用,不幸的是,当(或) 在不适用特殊含义的地方指定时, Git 不会快速失败。HEADFETCH_HEAD编辑:较新版本的 Git 现在会因HEAD. 例如,使用 git 版本 2.22.0:

~/code/foo/bar (master) $ git checkout -b HEAD
fatal: 'HEAD' is not a valid branch name.

FETCH_HEAD但是仍然允许调用一个分支。

于 2015-04-13T19:23:22.143 回答