9

我做了:

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.

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

4

2 回答 2

11

尝试

git push origin HEAD:refs/heads/ignore-netbeans-config
于 2011-11-10T16:33:08.877 回答
10

让我们先弄清楚几个小细节:

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

push操作对“ref”进行操作,默认的“mapping”会保留命名空间。这意味着当我推送一个分支时,它会在遥控器上显示为一个分支;当我推送标签时,它会在遥控器上显示为标签。考虑以下场景:

  1. 我想推送标签moo并使其显示为远程服务器上的分支(是的,我本质上是将标签“转换”为分支)。我将这样做:

    git push origin moo:refs/heads/moo

  2. Git 需要一种方法来区分快进和非 ff 推送,这样人们就不会错误地覆盖其他人的工作。假设我要推送分支masternextpu,其中只有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

于 2011-11-11T17:12:14.367 回答