Git 推送 Master 以外的分支

标签 git git-branch

<分区>

我一直在寻找一个可靠的答案,但没有真正找到任何相关的东西。我们正在使用远程 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

关于Git 推送 Master 以外的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30174287/

相关文章:

git - 如何获取所有 Git 分支?

git - 如何只克隆 Git 存储库的一个子文件夹并使子文件夹中的所有文件最终都位于根目录中?

git - 执行更新后 Hook 后如何更改所有者?

security - GIT 支持基于分支的用户授权——最佳实践还是工具?

regex - 获取所有匹配正则表达式的git分支并将其拆分为数组

Git 找到所有分支的 head commit

git - 从 bitbucket 存储库推送到共享主机 ftp 服务器

linux - 如何帮助 Windows 版 git 更好地处理 Linux Samba 共享上的存储库?

git p4 提交失败

Git:保存旧分支