99

Git GUI を使用してリモート ブランチのチェックアウトを行った後、次のreleases/rel_5.4.1ことをしようとすると、次の予期しないエラー メッセージが表示されますpush

fatal: The upstream branch of your current branch does not match
the name of your current branch.  To push to the upstream branch
on the remote, use

    git push origin HEAD:releases/rel_5.4.1

To push to the branch of the same name on the remote, use

    git push origin rel_5.4.1

Gitが何について話しているのかわかりません。origin releases/rel_5.4.1それが私がチェックアウトしたブランチなので、おそらくプッシュしたいでしょう。したがって、どちらのオプションも私には正しくないようです。

git status私はブランチにいると言いrel_5.4.1ます。

my に表示されるブランチは次の.git/configとおりです。

[branch "rel_5.4.1"]
    remote = origin
    merge = refs/heads/releases/rel_5.4.1

何が起こっている?

4

6 に答える 6

95

注意!この回答は最も多くの票を獲得し、技術的には正しいものですが、push.default通常、実際の問題はローカル ブランチと上流ブランチの名前の意図しない不一致である場合、問題はオプションであることを示唆しています。この回答の指示にやみくもに従うと、変更が間違ったブランチにプッシュされる可能性があります。安全なクイック フィックスについては、代わりにhttps://stackoverflow.com/a/24865780/2279059を参照してください。

コメントに隠されている、おそらく最も重要な詳細を見逃している可能性のある読者のために:

これはgit config push.default設定によるものです。 入力時の動作を定義しgitますgit push(リンクを参照)。

質問では、どうやら設定がに設定されていたようsimpleです(これはのデフォルトですgit v2)、おそらく

git config --global push.default simple

これは、gitローカル ブランチとリモート ブランチが正確に一致しない場合、プッシュを拒否することを意味します。

@TomSpurlingが指摘しているように、通常はローカルブランチとリモートブランチに同じ名前が必要なため、上記の設定はより安全で通常の使用に推奨されます。

ただし、特定の状況で、ローカル ブランチが別の名前で別のリモート ブランチを追跡している場合は、それを変更する必要があります。

git ごとにトラッキング ブランチにプッシュできるようにするには、makegit pullgit pushsymmetricを使用します。

git config push.default upstream

注:すべての に対してこれをグローバルに設定するにはgit、 を使用しますが、このオプションはそのgit config --global push.default upstream
ままにしてgit config --global push.default simple、実際に必要なワークロードでのみこのオプションを設定することをお勧めします。

于 2017-03-07T07:31:37.430 に答える
60

ローカル ブランチは呼び出されrel_5.4.1ますが、リモート ブランチは呼び出さreleases/rel_5.4.1れます (Git に関する限り、/人間の目で読みやすくすることを除いて、ブランチ名に特別な意味はありません)。

プッシュするとき、Git は、ブランチをreleases/rel_5.4.1(リモート ブランチの名前) にプッシュするか、新しいリモート ブランチを作成するかを慎重に判断します。ただし、名前の類似性に気付きます。

新しいブランチを作成する場合を除き、正しいコマンドは次のとおりです。

git push origin HEAD:releases/rel_5.4.1

使用することもできます

git push origin rel_5.4.1:releases/rel_5.4.1

警告を完全に修正するには、ローカル ブランチの名前をリモート名と一致するように変更します。

git branch -m releases/rel_5.4.1
于 2014-07-21T13:01:23.207 に答える
41

このエラーは、次の方法で一度だけ修正できます。

git branch releases/rel_5.4.1 -u origin/releases/rel_5.4.1

ブランチのアップストリームを変更して、正しいリモートに一致させます (再び)。

于 2016-03-29T10:18:37.823 に答える
3

リモートとは異なるローカルブランチ名を持つことは、Gitあまり好きではないようです。以下を発行する必要があります。

git push origin HEAD:releases/rel_5.4.1

プッシュごとに明示的に

于 2014-07-21T12:07:37.633 に答える