ブランチのマージ
ここでは、ブランチのマージを紹介します。マージとは
マージとは、ブランチで行った変更内容を、別のブランチに結合することです。例えば、リポジトリーにブランチが1つ存在するとします。
そのブランチをブランチすると、リポジトリーにあるブランチが2つになります。
それぞれのブランチは、お互い干渉せずに並行して変更内容をコミットしていくことができます。
マージを行うと、あるブランチで行っていた変更内容を、別のブランチに結合することができます。
上図は、「master」ブランチに「Ver2」ブランチをマージした状態です。
ブランチ自身は結合されない
結合されるのは、それぞれのブランチで行った変更内容だけです。ブランチ自身は結合されません。
また、ブランチも削除されません。
引き続き各ブランチで作業を継続することができます。
マージの方法
マージは、ブランチの状況に応じて、以下の2種類のいずれかの方法を使用します。- ファーストフォワード
- 3ウェイマージ
ファーストフォワードによるマージ例
「ファーストフォワード」によるマージ例です。マージはブランチの変更内容の結合ですので、ブランチの例も混ぜてマージを紹介します。
1.現在の状況
「Git」を利用してアプリの開発を行っています。ブランチ名は「master」です。
「master」ブランチからアプリをビルドし、ちょうどバージョン1.0のアプリをリリースしたところです。
2.バージョン2用のブランチの作成
バージョン1.0の開発はこれで終了し、次にバージョン2.0の開発に取り掛かります。ここで、バージョン2.0用のブランチを作成します。
ブランチ名は「Ver2」です。
3.ブランチの切り替え
ユーザーはバージョン2.0用のブランチで作業を行うため、作業対象のブランチを「master」から「Ver2」に切り替えます。4.ファイルの編集とコミット
ユーザーはファイルの編集を行い、区切りの良い作業を終えたところでコミットを行います。5.緊急性のある不具合
ここでバージョン1.0にセキュリティーの脆弱性が見つかり、最優先で不具合の対応を行う必要がでてきたとします。ユーザーは、作業対象のブランチを「Ver2」から「master」に切り替えます。
6.不具合対応用のブランチの作成
不具合修正版のリリースは、不具合が本当に解消されているかテストを行ってからリリースする必要があります。いきなり「master」ブランチに修正したファイルをコミットする方法は、良い方法ではありません。
特に他のユーザーとリポジトリーを共有している場合、混乱の原因になります。
まず、不具合対応用のブランチを「master」から作成します。
作成するブランチの名称は、「BugFix」です。
7.ブランチの切り替え
ユーザーは不具合修正用のブランチで作業を行うため、作業対象のブランチを「master」から「BugFix」に切り替えます。8.不具合の修正
不具合の修正を行い、コミットします。「BugFix」ブランチからアプリをビルドし、不具合が解消されているか確認を行います。
9.ブランチの切り替え
アプリのテストに問題がなければ、「master」ブランチに「BugFix」ブランチをマージします。まず、作業対象のブランチを「BugFix」から「master」に切り替えます。
10.ブランチのマージ(ファーストフォワードマージ)
「master」ブランチに「BugFix」ブランチをマージします。このマージでは、「master」ブランチのブランチヘッドを、「BugFix」ブランチのブランチヘッドまで進めます。
これは「Commit3」の直線上に「Commit5」があり、ブランチヘッドの移動だけでマージが完了するためです。
これで不具合修正の作業は完了です。
「master」ブランチからアプリをビルドし、バージョン1.1のアプリをリリースします。
この方法によるブランチのマージは、ブランチヘッドの移動だけでマージが完了するため「ファーストフォワード(Fast Forward)」と呼ばれます。
11.ブランチの削除
「BugFix」ブランチは、「5.緊急性のある不具合」対応用に作成したブランチです。不具合の対応が完了し、「BugFix」ブランチは役割を果たしました。
もう「BugFix」ブランチは不必要なので「BugFix」ブランチを削除します。
もしまた別の不具合対応が必要になったら、「master」ブランチから新しいブランチを作成し、そのブランチで同様の作業を行います。
12.ブランチの切り替え
ユーザーは、元々行っていたバージョン2.0開発の作業に戻るため、作業対象のブランチを「master」から「Ver2」に切り替えます。13.作業の続行
これでバージョン2.0開発の作業を続行できます。ただし不具合の修正(Commit5)は、「Ver2」ブランチに盛り込まれていません。
不具合の修正(Commit5)を「Ver2」ブランチに盛りこみたければ、「master」ブランチと「Ver2」ブランチをマージする必要があります。
この状態でバージョン2.0開発の作業が完了し、「master」ブランチと「Ver2」ブランチをマージする例は、「3ウェイマージ」を参考にしてください。