我有一个工作的git repo.但是,我错过了remotes/origin/HEAD -> origin/master
打字的时候git branch -a
.为什么HEAD丢失了,如何将丢失的HEAD添加到我的仓库?
Nev*_*nel 36
HEAD
只有在克隆repo时才会获取原点.如果您另外添加遥控器(例如通过使用git remote add
或通过重命名另一个现有遥控器),此参考将不存在,因为没有理由拥有它.
在大多数情况下,远程存储库应该是裸存储库,而裸存储库HEAD
只是指向"默认"分支.这只是一次相关:克隆时.因此,在克隆之后,任何远程HEAD
s对您的克隆都不再重要,Git将不会从任何远程获取该引用.
正如用户lesmana所要求的那样,我再次研究了这一点以找到更多信息:
origin/HEAD
?"你不必这样做.
ref对你的repo操作方式没有影响,而ref实际上只是文件系统上的一个小文本文件,所以它几乎不占用空间(只需几个字节).
如果您仍想删除它,则可以使用
git update-ref -d refs/remotes/origin/HEAD
Run Code Online (Sandbox Code Playgroud)
(如果要删除未打开的远程HEAD origin
,请改用相应的遥控器名称).
origin/HEAD
?"如前所述,远程HEAD ref仅用于克隆,Git以后从未需要.除非你手动使用它(这看起来不太有用,你可以只使用它指向的分支),没有理由手动创建它.
然而,如果你绝对必须,你可以使用
git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
除了可能告知用户哪个分支被认为是克隆的远程仓库中的默认分支之外,没有具体的原因.但是,正如我上面提到的,它的存在不会导致任何问题并几乎不占用任何空间,因此没有真正的理由将其删除.
有关更多详细信息,请随时直接在Git邮件列表中询问Git开发人员:)
没有一个man page直接解释git clone
总是使用它,但它在某些地方发现了侧面提及.
例如,man git clone
说:
--branch <name>
-b <name>
而不是将新创建的HEAD指向克隆存储库的HEAD指向的
<name>
分支,而是指向分支.[...]
和
--[no-]single-branch
仅克隆导致单个分支的提示的历史记录,由
--branch
选项指定或主分支远程的HEAD指向.[...]
HEAD
[...]如果存储库没有与任何工作树(即裸存储库)相关联,则意义不大,但有效的Git存储库必须具有该
HEAD
文件; 一些瓷器可能会用它来猜测存储库的指定"默认"分支(通常是主).
这意味着
git clone
使用远程repo的HEAD ref来确定指向本地的位置HEAD
(除非你指定覆盖--branch
).要使用该ref,它必须在本地创建它(因此origin/HEAD
).如上所述,它根本就不会被删除.refrefs/remotes/origin/HEAD
不仅对于克隆有用。如果您的 Git 存储库包含子模块,则这是必需的。命令git submodule update --remote
期望您的子模块应该有它:
$ git submodule update --remote
fatal: Unable to find refs/remotes/origin/HEAD revision in submodule path 'submodule-name'
Run Code Online (Sandbox Code Playgroud)
因此,还有一种方法可以设置或删除默认分支( ref 的目标refs/remotes/origin/HEAD
)。
查询远程以确定默认分支并将其设置为 ref refs/remotes/origin/HEAD
:
git remote set-head origin -a
Run Code Online (Sandbox Code Playgroud)
对于批量操作(对所有子模块执行):
git submodule foreach git remote set-head origin -a
Run Code Online (Sandbox Code Playgroud)
将 refrefs/remotes/origin/HEAD
显式设置为其他现有分支(例如develop
):
git remote set-head origin develop
Run Code Online (Sandbox Code Playgroud)
删除参考refs/remotes/origin/HEAD
:
git remote set-head origin -d
Run Code Online (Sandbox Code Playgroud)
查看此处了解更多详细信息:
归档时间: |
|
查看次数: |
9406 次 |
最近记录: |