ローカルブランチをチェックアウトし、ワーキングディレクトリーとローカルブランチをマージする
「ローカルブランチ」を「チェックアウト」し、「ワーキングディレクトリー」と「ローカルブランチ」をマージします。マージは3ウェイマージで行われます。
通常マージというと、ブランチとブランチのマージを想像するかと思います。
この方法を利用すると、「ワーキングディレクトリー」と「チェックアウト」する「ローカルブランチ」をマージすることができます。
マージ元のファイルについて
マージ元のファイルは、「ローカルブランチ」を「チェックアウト」する前に「ワーキングディレクトリー」内に存在するファイル、かつ、変更されているファイルが対象になります。従ってクリーンな状態で「チェックアウト」を行っても、マージは行われません。
マージコミットは作成されない
ブランチ同士をマージした際、「マージコンフリクト」が発生しなければ、自動的にコミットが行われます。(マージコミット)しかしこの方法ではファイルのマージは行われますが、コミットは行われません。
「マージコンフリクト」が発生した状況と似たような状況になります。
自分でコミット作業を行う必要があります。
1.ブランチの確認
ここでは例として、「master」ブランチで変更したファイルと「sub」ローカルブランチをマージします。ブランチの一覧を表示すると、以下のようになっています。
「master」ローカルブランチと「sub」ローカルブランチがあることが分かります。
また、「*」マークが付いている「master」ローカルブランチが、現在のブランチであることが分かります。
従って「HEAD」は「master」ローカルブランチを指しています。
2.masterローカルブランチの状態
「master」ローカルブランチの状態を確認すると、 「ワーキングディレクトリー」内で変更のあったファイルの一覧が表示されます。「main.txt」ファイルが変更されています。
このファイルはコミットされていません。
変更されたファイルがマージ元のファイルになります。
また、「ワーキングディレクトリー」内に変更されたファイルがあるため、「ワーキングディレクトリー」はダーティーな状態です。
3.masterローカルブランチのワーキングディレクトリー
「master」ローカルブランチの「ワーキングディレクトリー」は、以下のようになっています。4.subローカルブランチのワーキングディレクトリー
マージ前の「sub」ローカルブランチの「ワーキングディレクトリー」は、以下のようになっています。5.コマンドの実行
コマンドのオプションは、以下のオプションを指定します。ショートオプション | ロングオプション |
---|---|
-m | --merge |
「端末」から、以下のコマンドを実行します。
コマンドの詳細は、「ローカルブランチをチェックアウトするコマンドの説明」を参考にしてください。
ポイントは、赤字の箇所です。
git checkout --merge sub
6.コマンドの実行結果
以下のようにメッセージが表示され、「sub」ローカルブランチが「チェックアウト」されます。また、マージを行ったファイルの一覧が表示されます。
7.ブランチの確認
ブランチを確認すると、以下のように「sub」ローカルブランチに「*」マークが付いており、現在のブランチが「sub」ローカルブランチであることが分かります。「sub」ブランチを「1.」の状態と比較すると、コミットが行われていないことが分かります。
必要に応じて、自分でコミット作業を行います。
8.subローカルブランチのワーキングディレクトリー
マージ後の「sub」ローカルブランチの「ワーキングディレクトリー」は、以下のようになっています。元々「sub」ローカルブランチに「main.txt」ファイルは存在していなかったため、今回のマージは、「main.txt」ファイルの追加で完了しています。