由于不同的原因,这似乎是一个常见的错误。
我有一个名为“kiflea.git”的简单裸 git 存储库,我像这样克隆它:
git clone git://kipdola.be/kiflea.git
然后 git 告诉我:warning: remote HEAD refers to nonexistent ref, unable to checkout.
是的, map 中没有版本文件,除了 .git 目录。 无论如何,我唯一需要做的是:
cd kiflea
git checkout master
它有效,所有文件都在那里。 但我认为克隆一个 repo 会自动 check out master,那么到底发生了什么,我该如何修复它?
我注意到,在我执行 git checkout master
位之后,它被添加到我的本地 .git 配置文件中:
[branch "master"]
remote = origin
merge = refs/heads/master
知道这个 git 存储库在遥远的过去曾经是一个 svn 存储库可能很有趣。
Ps: 当使用 gitweb 浏览裸仓库时,那里显然有一个 master
分支:http://kipdola.be/gitweb/?p=kiflea.git;a=summary
最佳答案
warning: remote HEAD references nonexistent ref, unable to checkout.
表示远程(裸)存储库在名为 HEAD 的文件中包含分支引用
的值与同一存储库中的任何已发布分支都不匹配。实际上,该文件定义了克隆存储库后默认应 check out 的哪个分支。
请注意,该警告仅表示 git 未进行 checkout 。克隆的存储库在其他方面都很好。只需执行 git branch -a
来查看可能的分支并执行 git checkout the-branch-you-want
来解决这个问题.
这通常是因为该文件的默认内容(.git/HEAD
或裸存储库的普通HEAD
)是 ref: refs/heads/master
这表示如果有人要克隆
这个存储库,他们应该默认克隆分支 refs/heads/master
。默认情况下,Git 将创建没有 refs/heads/
前缀的本地分支(即默认情况下为 master
)。尝试 git help symbolic-ref
获取更多信息。
这种情况的问题是 Git 不提供修改远程 符号引用的方法,因此您要么使用 Git 托管提供商已经实现的东西(例如设置 - GitHub 中的默认分支,如果您有管理员权限)或者你必须使用分支名称 master
作为默认分支(因为这是文件 HEAD
的默认内容,如果你不能修改那个文件,你会永远被 master
困住)。
如果你有一个 shell 访问你的远程 git 仓库,你可以简单地 cd path/to/git/repo; git symbolic-ref HEAD refs/heads/XYZ
其中 XYZ
是您要默认使用的分支名称。
解决这个问题的一种方法是创建一个没有提交的新远程裸仓库,然后执行 git push name-of-the-remote my-special-branch-name
这将导致包含单个分支 my-special-branch-name
的裸存储库,但 HEAD
符号引用仍然包含指向 master
的默认值。结果,您将收到上述警告。如果您无法修改远程 HEAD
文件,您可以使用语法 git push name-of-the-remote my-special-branch-name:master
发布您的分支,这意味着您名为 my-special-branch-name
的本地分支应在远程上作为分支 master
发布。
关于git - 警告 : remote HEAD refers to nonexistent ref, 无法 checkout ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11893678/