推送到git远程分支

jul*_*lio 32 git github

我可以用手学习如何将本地分支推送到远程分支.请看下面.非常感谢!

克隆了repo后创建了本地分支

$ git checkout -b mybranch remotes/origin/mybranch

$ git branch -a
  master
* mybranch
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/mybranch
Run Code Online (Sandbox Code Playgroud)

但是当试图推动变革时:

$ 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
Run Code Online (Sandbox Code Playgroud)

小智 88

正如Abizern所说,这有效:

git push origin mybranch
Run Code Online (Sandbox Code Playgroud)

但是,为了进一步解释,在mybranch部分是的Refspec.这指定了应该使用给定的本地提交更新的远程引用.

所以,上面的命令相当于:

git push origin mybranch:mybranch
Run Code Online (Sandbox Code Playgroud)

甚至:

git push origin mybranch:refs/heads/mybranch
Run Code Online (Sandbox Code Playgroud)

事实上,既然你在当地的mybranch,你可以做到:

git push origin HEAD:mybranch
Run Code Online (Sandbox Code Playgroud)

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

git push origin HEAD^:mybranch
Run Code Online (Sandbox Code Playgroud)

你想把除最顶层补丁以外的所有补丁推送到远程分支的地方.

最后,如果要删除远程mybranch,您可以:

git push origin :mybranch
Run Code Online (Sandbox Code Playgroud)

  • 因为refspec是<src>:<dst>,所以通过不使用<src>部分,这基本上就是说使远程的主题分支没有,这将删除它.[来源](http://git-scm.com/book/ch9-5.html) - 最后一段 (3认同)
  • 感谢markmc的详细解释 (2认同)

Abi*_*ern 48

尝试

git push origin mybranch
Run Code Online (Sandbox Code Playgroud)

这会将名为mybranch的分支推送到远程命名


MST*_*MST 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不做args应该,现在,做你想做的.这不会限制您推送到与本地名称相同的远程分支,就像上面的一些命令那样.

我通常做的最后一件事:修改git pull以改变这个序列:

  • git fetch && git merge [remote_upstream]
  • git fetch && git rebase [remote_upstream]

使用此命令: git config --global branch.autosetuprebase remote