git - 警告 : remote HEAD refers to nonexistent ref, 无法 checkout

标签 git

由于不同的原因,这似乎是一个常见的错误。

我有一个名为“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/

相关文章:

git - Unity 3D 工作流程 - 不断重建光照

windows - .gitignore 不适用于 Windows

git - 如何在不同的注册用户下克隆一个 git private repo?

git - 带有右箭头的github存储库文件夹是什么意思?

git - 如何仅在子目录中运行 husky 预提交

git - 推送后删除的文件仍然存在于 Git 远程仓库中吗?

git - 如何使用 git 将更改推送到生产服务器?

git - git-apply 或 git-am 应该提供相同的哈希值吗?

git - git 中的损坏分支,致命 : your current branch appears to be broken

git - 如何使 Jenkins 构建状态徽章动态显示其文件所在的分支