web-dev-qa-db-ja.com

致命的:現在のブランチの上流ブランチが現在のブランチの名前と一致しません

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

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

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

何が起こっている?

47
Aaron Digulla

ローカルブランチは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
36
Aaron Digulla

おそらく最も重要な詳細を見逃すかもしれない読者の利益のために、コメントによく隠されています:

これは git config Push.default 設定によるものです。入力時にgitが何をするかを定義しますgit Pushリンクを参照 )。

質問では、おそらく設定はsimplegit v2のデフォルト)に設定されたようです。おそらく

git config --global Push.default simple

つまり、ローカルブランチとリモートブランチが完全に一致しない場合、gitはプッシュを拒否します。

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

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

Gitごとに追跡ブランチにプッシュできるようにするには、make git pullおよびgit Push symmetricを使用します。

git config Push.default upstream

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

58
Tino

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

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

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

25
s.meijer

私の場合 git branch --unset-upstreamはその問題を解決しました。

15
gpap

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

git Push Origin HEAD:releases/rel_5.4.1

すべてのプッシュで明示的に

2
hek2mgl