我一直在寻找一个可靠的答案,但没有真正找到任何相关的东西。我们正在使用远程 git 存储库,我们正在将不是 master 的分支推送到远程存储库。例如:
git checkout -b new_branch
git add --all .
git commit -m "changes"
git push remote new_branch
但是,当我们尝试从那个裸远程存储库克隆时,我们得到错误:
git clone /path/to/repo.git
warning: remote HEAD refers to nonexistent ref, unable to checkout.
我不确定为什么 HEAD 是分离的而不是指向 new_branch 上的最后一次提交?我们如何克隆这个远程存储库?
warning: remote HEAD references nonexistent ref, unable to checkout.
表示远程(裸)存储库在文件 HEAD
中包含不匹配的分支引用同一存储库中的任何已发布分支。
请注意,该警告仅表示 git 未执行 check out 。 克隆的存储库在其他方面都很好。只需执行 git branch -a
以查看可能的分支并执行 git checkout the-branch-you-want
以解决该问题。
这通常是因为该文件的默认内容是 ref: refs/heads/master
表示如果有人要克隆
这个存储库,他们应该默认克隆分支 refs/heads/master
。默认情况下,Git 将创建没有 refs/heads/
前缀的本地分支(即默认情况下为 master
)。尝试 git help symbolic-ref
获取更多信息。
这种情况的问题是 Git 不提供修改远程 符号引用的方法,因此您要么使用 Git 托管提供商已经实现的东西(例如设置 - GitHub 中的默认分支,如果您有管理员权限),或者您必须使用分支名称 master
作为默认分支(因为这是该符号引用的默认值)。
解决这个问题的一种方法是创建一个没有提交的新远程裸仓库,然后执行 git push name-of-the-remote my-special-branch-name
这将导致包含单个分支 my-special-branch-name
的裸存储库,但 HEAD
符号引用仍然包含指向 master
的默认值。因此,您会收到上述警告。
参见:this post