我做了:
git co upstream/master # To no branch.
<then did a trivial edit on some file...>
git commit -a -m "Trivial edit"
git push origin NewBranch
但得到了这个:
$ git push origin ignore-netbeans-config
error: src refspec ignore-netbeans-config does not match any.
我可以在不创建本地分支的情况下推送到新分支吗?
答案 0 :(得分:11)
试
git push origin HEAD:refs/heads/ignore-netbeans-config
答案 1 :(得分:10)
让我们首先澄清一些小细节:
refs/heads
命名空间下的“ref”。只需ls .git/refs/heads
和cat
个文件即可查看我的意思。refs/tags
命名空间下的“ref”。只需.git/refs/tags
即可自行查看。HEAD
只是另一个“参考”,但它的特殊之处在于它可以是“象征性的”。只需cat .git/HEAD
,看看它的内容。 push
操作对“ref”进行操作,默认的“mapping”保留命名空间。这意味着当我推动分支时,它将显示为遥控器上的分支;当我按下标签时,它会在遥控器上显示为标签。请考虑以下情况:
我想推送标签moo
并使其显示为远程服务器上的分支(是的,我实际上是将标签“转换”为分支)。我就是这样做的:
git push origin moo:refs/heads/moo
Git需要一种方法来区分快进和非ff推送,这样人们就不会错误地覆盖别人的工作。假设我想推送分支master
,next
和pu
,其中只有pu
是非ff。我就是这样做的(请注意,当您使用+
时必须提供显式映射):
git push origin master next +pu:pu
现在,让我们回答您的问题。您希望推送HEAD
,使其显示在远程的refs/heads
命名空间中,作为名为“ignore-netbeans-config”的分支。如果此分支之前不存在,或者您正在覆盖其中的某些提交(即非ff推送),请使用+
。否则,不要。最终结果:
git push origin +HEAD:refs/heads/ignore-netbeans-config
TL; DR版本:git push origin +HEAD:refs/heads/ignore-netbeans-config