“ git push remote branch”和“ git push remote HEAD:branch”之间有什么区别?

时间:2019-02-25 19:32:34

标签: git

尝试前一种方法时,我得到了error: src refspec branch does not match any.,而尝试后者的方法却成功了。

如果值得注意,分支名称为1.3

这两者之间有什么区别?为什么第二个成功后第一个失败?

2 个答案:

答案 0 :(得分:1)

当您说HEAD:branch时,您不需要,您需要在本地输入具有与远程分支名称相同的本地分支...当您键入{{1} },您要求它将当前已签出的所有内容作为远程分支放置,而不管它在本地上是什么调用(或在分离的HEAD 上运行)。

答案 1 :(得分:1)

根据您看到的错误,您的本地存储库似乎没有名为branch的分支,但是远程存储库必须已经有一个分支,例如,如果某个协作者已经推送到branch

有问题的git push的特定参数称为refspec,使用冒号分隔符,实际上可以在远程端重命名分支或对象。因此,refspec HEAD:branch意味着如果HEAD symbolic reference引用分支(或HEAD的提交,则从当前分支的最近提交开始推动分支。指的是detached),而是指远程端的参考文件branch

为完整起见,如果远程上尚不存在branch,则必须调用

git push remote HEAD:refs/heads/branch
  

<refspec> ...

     

指定要使用哪个源对象更新的目标引用。的   <refspec>参数的格式是可选的加+,后跟   源对象<src>,后跟冒号:,后跟   目标参考<dst>

     

通常是您要推送的分支的名称,但是   它可以是任意的“ SHA-1表达式”,例如master~4HEAD   (请参阅gitrevisions)。

     

告诉远端的哪个ref以此更新   推。此处不能使用任意表达式,实际引用必须为   命名。如果没有任何git push [<repository>]参数的<refspec>是   设置为使用<src>更新目标的一些参考   remote.<repository>.push个配置变量,:<dst>部分可以是   省略-这样的推送将更新<src>通常会更新的引用   在命令行上没有任何<refspec>。否则,将缺少:<dst>   表示更新与<src>相同的引用。