マージコンフリクトを解決して、リベースを続行する
リベースでは、リベース実行時にファイルの差分を適用した際、差分が衝突することがあります。この衝突のことを、「マージコンフリクト」といいます。
差分が衝突は、差分をどのように適用すればよいか「Git」が判断できなかった時に発生します。
リベース実行時に「マージコンフリクト」が発生すると、リベースは一時的に中断されます。
「マージコンフリクト」発生時ユーザーは、衝突した箇所を修正しリベースを続行するか、リベースを中止するか、衝突が発生した「コミットオブジェクト」のリベースをスキップすることができます。
ここでは例として、「マージコンフリクト」の発生時に「マージコンフリクト」を解決し、リベースを続行します。
1.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。現在のブランチは、「fix」ブランチであることが分かります。
同様に、「HEAD」は「fix」ブランチを指していることが分かります。
ここでは例として、「fix」ブランチを「master」ブランチにリベースし、「mastsr」ブランチに「fix」ブランチの変更内容を結合します。
2.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「fix」ブランチを「master」ブランチにリベースするため、リベース対象の「コミットオブジェクト」は、以下のようになります。
- Commit4
- Commit5
- Commit6
3.リベースの実行
「端末」から、以下のコマンドを実行します。コマンドの詳細は、「ファイルの変更内容を異なるブランチに結合するコマンドの説明」を参考にしてください。
git rebase --verbose master
4.コマンドの実行
以下のように、リベース結果が表示されます。「master.txt」ファイルで「マージコンフリクト」が発生したと出力されています。
この「マージコンフリクト」は、「Commit6」リベース時に発生しています。
5.ワーキングディレクトリーの状態
「ワーキングディレクトリー」の状態を見てみます。以下のように、リベースが中断されていることや、「master.txt」ファイルで「マージコンフリクト」が発生していることが分かります。
6.マージコンフリクトが発生したファイルの中身
「マージコンフリクト」が発生した「master.txt」ファイルを開くと、以下のように衝突が発生した箇所に「マージコンフリクト」が挿入されています。7.マージコンフリクトの解決
ファイルを修正し、上書き保存します。ここでは以下のように修正しました。
8.ファイルをステージングエリアに追加
修正したファイルを「ステージングエリア」に追加します。これで、 「マージコンフリクト」の解決作業は完了です。
9.ワーキングディレクトリーの状態
「ワーキングディレクトリー」の状態を見てみます。以下のように、「master.txt」ファイルが「ステージングエリア」に追加されています。
10.リベースの続行
「マージコンフリクト」の解決作業が完了したので、リベースを続行します。コマンドのオプションは、以下のオプションを指定します。
オプション |
---|
--continue |
「端末」から、以下のコマンドを実行します。
コマンドの詳細は、「ファイルの変更内容を異なるブランチに結合するコマンドの説明」を参考にしてください。
ポイントは赤字の箇所です。
git rebase --continue
11.リベースの実行
引き続きリベースが実行されます。12.ブランチの確認
現在のブランチ構成を確認すると、以下のようになっています。「fix」ブランチが指す「コミットオブジェクト」の識別子が、「1.」と異なっています。
13.ブランチの構成
現在のブランチの構成を図にすると、以下のようになっています。「Commit4」の変更内容を元に、「Commit4’」が新規に生成されています。
「Commit5」の変更内容を元に、「Commit5’」が新規に生成されています。
「Commit6」の変更内容とユーザーの修正を元に、「Commit6’」が新規に生成されています。