Git で早送りせずにブランチをマージする

Azhar Bashir Khan 2022年2月6日
Git で早送りせずにブランチをマージする

このチュートリアルでは、Git で早送りせずにブランチをマージする方法について説明します。

Git を使用して、共同開発環境で作業します。さまざまな目的で多くのブランチを作成し、最終的にはそれらのブランチをメインブランチにマージして、リリースビルドを提供します。

Git のブランチを早送りありまたは早送りなしでマージします。

これを例を挙げて説明します。

Git で --no-ff(早送りなし)オプションを使用する場合と使用しない場合の git merge コマンドの使用

共同開発環境では、さまざまな目的に役立つように、Git に複数のブランチを作成することがよくありました。次に、これらのブランチをメインブランチにマージして、リリースビルドを提供します。

メインラインブランチの HEAD コミットは、マージしようとしているブランチのコミットの祖先である場合があります。このような場合、マージは早送りで行われます。

早送りマージは、現在のブランチチップからターゲットブランチへの線形パスで発生する可能性があります。ブランチ feature1 があり、それをメインラインブランチである main にマージするとします。

ここで、main ブランチの HEAD コミットが、マージしたいブランチ feature1 のコミットの祖先であると仮定します。

このような場合、ブランチをマージする代わりに、履歴を統合するために Git が行う必要があるのは、現在のブランチチップをターゲットブランチチップまで早送りすることです。

したがって、この場合、早送りすると、main ブランチの現在の HEADfeature1 ブランチの先端に移動します。

マージ前のブランチ、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 コマンドはブランチ feaure1main ブランチにマージし、マージコミットを生成します(早送りマージの場合でも)。

これは、リポジトリで発生するすべてのマージを文書化するのに役立ちます。

したがって、Git で早送りせずにブランチをマージする方法について詳しく説明しました。

詳細については、以下をご覧ください。

  1. Git マージ
  2. git-merge

関連記事 - Git Merge