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ブランチは名前空間の下の「ref」です。ただls .git/refs/headscat私が何を意味するかを見るためにそこにあるファイル。
  2. refs/tagsタグは名前空間の下の「ref」です。自分の目で確かめ.git/refs/tagsてください。
  3. HEAD単なる別の「ref」ですが、「シンボリック」にできるという点で特別です。ただcat .git/HEAD、それが何を言っているのか見てください。

push操作は「参照」で動作し、デフォルトの「マッピング」は名前空間を保持します。これは、ブランチをプッシュすると、リモートにブランチとして表示されることを意味します。タグを押すと、リモコンにタグとして表示されます。次のシナリオを検討してください。

  1. タグをプッシュしmooて、リモート サーバー上でブランチとして表示させたい (はい、基本的にタグをブランチに「変換」しています)。これは私がそれを行う方法です:

    git push origin moo:refs/heads/moo

  2. Git には、早送りプッシュと非 ff プッシュを区別する方法が必要です。これにより、人々が誤って他の人の作業を上書きしてしまうことがなくなります。masterブランチ、next、およびをプッシュしたいとしましょう。そのうちの ffpuのみです。puこれが私が行う方法です(を使用している場合は、明示的なマッピングを提供する必要があることに注意してください+):

    git push origin master next +pu:pu

  3. さて、あなたの質問に行きましょう。リモートの名前空間に「ignore-netbeans-config」という名前のブランチとしてHEAD表示されるようにプッシュします。refs/headsこのブランチが以前に存在しなかった場合、またはその中のいくつかのコミットを上書きしている場合 (つまり、非 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 に答える