Merge と Commit という用語には混乱があるかもしれません。git では、コミットは単にデルタであり、コンテキストの 2 つの変更の間です。マージは、2 つの親のブランチを結合する単一のエンティティを表すシンボリック コミットです。
これは、マージが実際に重要な SVN のようなリビジョン システムとは異なります。git では、それを戦略と見なす方が安全です。
したがって、レポ A にポイントがあり、別のポイント B がある場合、それらは何らかのパスを介して互いに接続します (2 つの別々の孤立したブランチにない限り)。ポイント C を作成するように git に指示する場合、これはブランチ A または B の拡張と見なすことができますが、これは A から B への、または B から A へのシンボリック マージです。共有の親が見つかるまで、A と B の親子関係を調べます。
したがって、OA と OB が OAC (C はマージ) を作成するパスである場合、BOA をパスと見なします。
OB をマージしたいものと見なし、OA を忘れている可能性があるため、これは混乱を招きます。しかし、それは論理的です。
あなたの例では、4.3.1.11 が A、origin/develop が B、4.3.1.13 が G の場合、ブランチ ツリーは単に ABCDEFG であることがわかります。したがって、A から G に移動するには、ツリーに沿って進むだけです (早送りできます)。
別の言い方をすれば、G には既に A が含まれており、デルタ BG が既に適用されているだけなので、明らかに戦略の正味の効果は git が「何もしない」ということです。
あなたの例では、4.3.1.11 と 4.3.1.13 はタグであるため、定義上、移動しないでください。回答でコメントしたgit branch -f
ように、ブランチ ポインターを新しいコミットに移動するために使用できますが、それはマージではありません。コミットを削除するために使用することもできますgit revert
(逆コミットを作成し、それをチェーンに追加するように git に要求します)。