我有一个正在运行的git repo。但是,在输入remotes/origin/HEAD -> origin/master
时,我会错过git branch -a
。为什么缺少HEAD,如何将丢失的HEAD添加到我的仓库?
答案 0 :(得分:35)
只有克隆回购时才会获取原点HEAD
。如果您另外添加遥控器(例如,使用git remote add
或重命名另一个现有遥控器),此参考号将不存在,因为没有理由拥有它。
在大多数情况下,远程回购应为bare repos,而在裸回购HEAD
中仅指向“默认”分支。这只是一次相关:克隆时。因此,在克隆之后,任何远程HEAD
对您的克隆都不再重要,Git将不会从任何远程获取该引用。
当用户 lesmana 请求时,我再次查看此信息以查找更多信息:
origin/HEAD
?”您不必这样做。
ref对你的repo操作方式没有影响,而ref实际上只是文件系统上的一个小文本文件,所以它几乎不占用空间(只需几个字节)。
如果您仍想删除它,可以使用
git update-ref -d refs/remotes/origin/HEAD
(如果您要删除不在origin
上的远程HEAD,请改用相应的遥控器名称。)
origin/HEAD
?”如前所述,远程HEAD ref仅用于克隆,Git以后从未需要。除非你手动使用它(它看起来不太有用,你可以使用它指向的分支),没有理由手动创建它。
然而,如果你绝对必须,你可以使用
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
除了可以告诉用户明确哪个分支被认为是克隆的远程仓库中的默认分支之外,没有具体的理由。但是,正如我上面提到的,它的存在不会造成任何问题并且几乎不占用空间,因此没有真正的理由将其删除。
有关详细信息,请随时直接在Git邮件列表中询问Git开发人员:)
没有一个手册页直接解释git clone
总是使用它,但它在某些地方发现了侧面提及。
例如,man git clone
说:
--branch <name>
-b <name>
不是将新创建的HEAD指向克隆存储库的HEAD指向的分支,而是指向
<name>
分支。 [...]
和
--[no-]single-branch
仅克隆导致单个分支的提示的历史记录,由
--branch
选项或主分支远程的HEAD指向。 [...]
HEAD
[...]如果存储库没有与任何工作树(即裸存储库)相关联,则意义不大,但有效的Git存储库必须拥有
HEAD
文件;一些瓷器可能会用它来猜测存储库的指定“默认”分支(通常是 master )。
这意味着
git clone
使用远程repo的HEAD引用来确定指向本地HEAD
的位置(除非您使用--branch
指定覆盖)。要使用该ref,它必须在本地创建它(因此origin/HEAD
)。如上所述,它就不会被删除。