Git:如何从"无分支"推送到新的远程分支?

Ond*_*žka 9 git branch push remote-branch

我做了:

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

但得到了这个:

$ git push origin ignore-netbeans-config
error: src refspec ignore-netbeans-config does not match any.
Run Code Online (Sandbox Code Playgroud)

我可以在没有创建本地分支的情况下推送到新分支吗?

max*_*max 11

尝试

git push origin HEAD:refs/heads/ignore-netbeans-config
Run Code Online (Sandbox Code Playgroud)


art*_*non 10

让我们首先澄清一些小细节:

  1. 分支是refs/heads命名空间下的"ref" .只是ls .git/refs/headscat那里的文件,看看我的意思.
  2. 标签在refs/tags命名空间下是"ref" .只是.git/refs/tags为了亲自看看.
  3. HEAD只是另一个"参考",但它的特殊之处在于它可以是"象征性的".只是cat .git/HEAD看看它说的是什么.

push操作上的"REF"操作,并且默认的"映射"保留的命名空间.这意味着当我推动分支时,它将显示为遥控器上的分支; 当我按下标签时,它会在遥控器上显示为标签.请考虑以下方案:

  1. 我想推送标签moo并使其显示为远程服务器上的分支(是的,我实际上是将标签"转换"为分支).我就是这样做的:

    git push origin moo:refs/heads/moo

  2. Git需要一种方法来区分快进和非ff推送,这样人们就不会错误地覆盖别人的工作.比方说,我要推的树枝master,nextpu,其中只有pu非FF.我就是这样做的(请注意,在使用时必须提供显式映射+):

    git push origin master next +pu:pu

  3. 现在,让我们回答你的问题.您希望推送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