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
何が起こっている?
ローカルブランチは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
おそらく最も重要な詳細を見逃すかもしれない読者の利益のために、コメントによく隠されています:
これは git config Push.default
設定によるものです。入力時にgit
が何をするかを定義しますgit Push
( リンクを参照 )。
質問では、おそらく設定はsimple
(git v2
のデフォルト)に設定されたようです。おそらく
git config --global Push.default simple
つまり、ローカルブランチとリモートブランチが完全に一致しない場合、git
はプッシュを拒否します。
@TomSpurlingのメモのように、通常はローカルブランチとリモートブランチに同じ名前が必要なため、上記の設定はより安全で通常の使用に推奨されます。
ただし、特定の状況では、ローカルブランチが異なる名前の異なるリモートブランチを追跡している場合、それを変更する必要があります。
Gitごとに追跡ブランチにプッシュできるようにするには、make git pull
およびgit Push
symmetricを使用します。
git config Push.default upstream
注:すべてのgit
sに対してこれをグローバルに設定するには、git config --global Push.default upstream
を使用します
ただし、おそらくgit config --global Push.default simple
のままにして、本当に必要なワークロードでのみこのオプションを設定することをお勧めします。
このエラーは、次の方法で一度だけ修正できます。
git branch releases/rel_5.4.1 -u Origin/releases/rel_5.4.1
正しいリモートに一致するように、ブランチのアップストリームを(再び)変更します。
私の場合 git branch --unset-upstream
はその問題を解決しました。
リモートと異なるローカルブランチ名を持つことは、Git
があまり好きではないようです。以下を発行する必要があります。
git Push Origin HEAD:releases/rel_5.4.1
すべてのプッシュで明示的に