Git で早送りせずにブランチをマージする
このチュートリアルでは、Git で早送りせずにブランチをマージする方法について説明します。
Git を使用して、共同開発環境で作業します。さまざまな目的で多くのブランチを作成し、最終的にはそれらのブランチをメインブランチにマージして、リリースビルドを提供します。
Git のブランチを早送りありまたは早送りなしでマージします。
これを例を挙げて説明します。
Git で --no-ff
(早送りなし)オプションを使用する場合と使用しない場合の git merge
コマンドの使用
共同開発環境では、さまざまな目的に役立つように、Git に複数のブランチを作成することがよくありました。次に、これらのブランチをメインブランチにマージして、リリースビルドを提供します。
メインラインブランチの HEAD
コミットは、マージしようとしているブランチのコミットの祖先である場合があります。このような場合、マージは早送りで行われます。
早送りマージは、現在のブランチチップからターゲットブランチへの線形パスで発生する可能性があります。ブランチ feature1
があり、それをメインラインブランチである main
にマージするとします。
ここで、main
ブランチの HEAD
コミットが、マージしたいブランチ feature1
のコミットの祖先であると仮定します。
このような場合、ブランチをマージする代わりに、履歴を統合するために Git が行う必要があるのは、現在のブランチチップをターゲットブランチチップまで早送りすることです。
したがって、この場合、早送りすると、main
ブランチの現在の HEAD
が feature1
ブランチの先端に移動します。
マージ前のブランチ、main
および feature1
の状況の図を以下に示します。
E---F---G feature1
/
A---B---C---D main
したがって、git merge
コマンドを使用して 2つのブランチをマージすると、早送りが発生します。
マージを行うには、次のようにコマンド do を実行します。
$ git merge feature1
コマンドの実行後、main
ブランチが早送りされます。
下の早送りの図をご覧ください。
E---F---G feature1, main
/
A---B---C---D
したがって、メイン
ブランチの現在の HEAD
が早送りされます。この場合、マージコミットは作成されません。
場合によっては、早送りではなく実際のマージを実行したいことがあります。ブランチトポロジを維持したいとします。
このような場合、オプション --no-ff
を指定して git merge
コマンドを使用できます。
コマンドオプション --no-ff
を使用すると、マージを早送りとして解決できる場合でも、すべての場合にマージコミットが作成されます。
したがって、この場合、早送りせずにマージを行うには、次のようにする必要があります。
$ git merge --no-ff feature1
したがって、git merge
コマンドはブランチ feaure1
を main
ブランチにマージし、マージコミットを生成します(早送りマージの場合でも)。
これは、リポジトリで発生するすべてのマージを文書化するのに役立ちます。
したがって、Git で早送りせずにブランチをマージする方法について詳しく説明しました。
詳細については、以下をご覧ください。