将代码推送到Git远程分支

38

我需要学习如何将本地分支推送到远程分支,麻烦看下面的内容。非常感谢帮助!

本地分支是在克隆仓库后执行以下操作创建的:

$ git checkout -b mybranch remotes/origin/mybranch

$ git branch -a
  master
* mybranch
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/mybranch

但是当尝试将更改推回服务器时:

$ git push mybranch mybranch
fatal: 'mybranch' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

$ git push remotes/origin/mybranch mybranch
fatal: 'mybranch' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

$ git push origin/mybranch mybranch
fatal: 'mybranch' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
3个回答

94

就像Abizern所说,这样可以解决问题:

git push origin mybranch

但是为了进一步解释,mybranch 部分是一个 refspec。它指定了应该使用给定的本地提交来更新的远程引用。

因此,上面的命令等同于:

git push origin mybranch:mybranch

或者甚至:

git push origin mybranch:refs/heads/mybranch

实际上,由于您正在本地的mybranch分支上,因此可以执行以下操作:

git push origin HEAD:mybranch

这很好理解,因为我经常发现自己在做类似以下的事情:

git push origin HEAD^:mybranch

如果你想将除了最上面的patch之外的所有内容推送到远程分支, 可以使用此命令。

最后,如果你想删除远程mybranch分支,你可以执行如下命令:

git push origin :mybranch

4
因为 refspec 的格式是 <src>:<dst>,如果省略 <src> 部分,就相当于在远程仓库上把主题分支设为空,也就是删除它。来源 - 最后一段 - Jeremy Iglehart
1
@JeremyIglehart 你有更新的链接吗?听起来很有趣。 - cambunctious
@cambunctious 看起来他们更新了这本书并重新组织了章节。现在在第10.5章中的“删除引用”下 - 这也在git-push文档中引用了<refspec>选项。查找“推送空的<src>允许您从远程存储库中删除<dst>引用。”希望这可以帮助到你。 - Jeremy Iglehart
顺便提一下,第10.5章是“Git内部原理”,“Refspec” - 以防将来重新编号,这样人们也可以找到它。(我没能及时回来编辑我的评论) - Jeremy Iglehart
我对“主题分支”有点困惑。这不是一个技术术语,而只是Git书中示例中分支的名称。感谢更新。 - cambunctious

50

尝试一下

git push origin mybranch

这会将名为 mybranch 的分支推送到名为 origin 的远程仓库。


7
这是一个旧问题,但我在那时用这个页面作为参考,并提供了一个不同角度的答案。根据我的经验,最好的方法是调整您的配置设置,使得最终你只需要输入 git push
你将推送到更新代码的相同远程分支:
  • git config --global push.default upstream
现在,你将远程分支设置为上游(如果尚未设置):
  • git branch --set-upstream-to origin/the_master
  • 注意:较旧版本可能会退回到该命令的弃用形式。
  • git branch --set-upstream local_branch origin/the_master
你有两个分支——本地和远程。执行无参数的 git pullgit push 应该会做你想要的事情。这不会限制你将内容推送到与本地分支名称相同的远程分支,如一些以上命令所示。
我通常做的最后一件事:修改 git pull 以从此序列更改:
  • git fetch && git merge [remote_upstream]
  • git fetch && git rebase [remote_upstream]
使用此命令:git config --global branch.autosetuprebase remote

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