推送除主分支以外的 Git 分支

3

我在寻找一个确定的答案,但没有找到任何相关的信息。我们正在使用远程Git仓库,在该仓库中推送不是主分支的分支。例如:

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上的最新提交。我们该如何克隆这个远程仓库?


你的远程名称是“remote”吗? - isherwood
remote 有主分支吗?也许你想要更改远程默认分支 - Tony
git branch -a 的输出会显示 remotes/origin/HEAD(或者远程名称)的信息吗? - chepner
是的,远程仓库的名称是“remote”。远程仓库上没有任何存储库,我们实际上是在远程推送一个全新的存储库。我们没有将主分支推送到远程存储库。 - ossys
2个回答

1
warning: remote HEAD refers to nonexistent ref, unable to checkout.的意思是远程(裸)仓库中的文件 HEAD 包含的分支引用与同一仓库中的任何已发布分支都不匹配。请注意,这个警告只表示git没有执行checkout操作。克隆的仓库除此之外都正常。只需执行git branch -a查看可能的分支,然后执行git checkout the-branch-you-want来解决问题。通常出现这种情况是因为该文件的默认内容是ref: refs/heads/master,这意味着如果有人要clone这个仓库,默认情况下会克隆分支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

1
你什么时候不算抄袭?https://dev59.com/AWct5IYBdhLWcg3wsPd5#15631690 - random
@flafoux,你在回答的结尾处说“参见:这篇帖子”,但是你把原始帖子逐字逐句地复制了很多段。如果你要进行逐字引用,特别是这么大的引用,你需要明确表明你是在引用,而不是用自己的话进行总结。一旦你这样做了——比如说,将你写的每个内容都加上引号,那么就变得清楚了,你基本上只是一个链接回答,因为你没有对来源进行总结,所以这不应该算是一个答案。 - DWright
@DWright 我本来想将这个标记为重复的,但不知道该怎么做...如果我只回复一个链接:有人说我需要放上内容,其他人说我不需要,还有一些抄袭问题... - flafoux

-3

远程仓库可以使用以下任一命令进行克隆

git clone https://github.com/username/repo.git
git clone git@github.com:username/repo.git

请告诉我您尝试使用的确切命令,以便我能更好地帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接