Git 列出分支时 HEAD 从主分支分离

Git HEAD detached from master branch when listing branches

我以为我将 HEAD 理解为 'current' 分支,但是在列出分支时我发现我的当前和远程 HEAD 对于我的一个回购协议是不同的。另一个存储库甚至没有列出远程总分支。有人可以解释以下内容吗:

me@portalinux ~/edcourse $ git branch -va
* master                9de94d9 Work on week 3 stuff thursday 
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master 9de94d9 Work on week 3 stuff thursday

如您所见,origin/HEAD 似乎只是指向 master。但在下面的回购中它没有:

me@portalinux ~/cpp $ git branch -va
* master             f30bc16 End of chapter 2
  remotes/cpp/master f30bc16 End of chapter 2

我处理存储库的唯一不同点是第一个存储库由两个不同的客户端初始化和更新,第二个存储库仅由一台计算机更新。一旦我开始使用第二台计算机进行更新,我将有兴趣了解第二个存储库是否获得指向 master 的远程 HEAD。

您认为 HEAD 指向当前分支的想法非常接近,但请注意,它可能并不总是如此。例如,在 "detached head" 状态下,它可能指向任意提交。

共享 Git 存储库通常实现为 bare repositories,这意味着它们缺少工作副本。本质上,它们仅作为 .git/ 目录存在。在没有工作副本的情况下,"current branch" 的概念缺乏意义,因此遥控器通常没有 HEAD.

有些遥控器 HEAD,例如非裸遥控器。 GitHub 使用 HEAD 来标识 "default branch",这是一个 GitHub 特定的概念。其他供应商可能会效仿,或将其用于完全不同的事情。