GitHubにおけるコンフリクトの解消

コンフリクトとは

あるファイルを2人以上で別々のブランチで編集、プルリクを送信している状態

<例>

・Aさん、Bさんの2人で開発している

・Aさんは「branch_A」、Bさんは「branch_B」でそれぞれ作業している

・AさんBさんが「あいさつ」と書かれているファイル「sample.text」をそれぞれのブランチで

 Aさん:「あいさつ」を「こんにちは」に変更

 Bさん:「あいさつ」を「こんばんは」に変更

・Aさんがmasterブランチをマージ後、Bさんがプルリクを出すと、GitはAさんの「こんにちは」を残すべきか、Bさんの「こんばんは」を残すべきかの判断ができない

 

これがコンフリクト

 

コンフリクトが起きているかの確認

プルリクページの一番下に以下のような表示が出ていれば、コンフリクトが起きている

This branch has conflicts that must be resolved ※コンフリクトが起きてるから解消してね

 

Conflicting files ※コンフリクトが起きているのは以下のファイルだよ

 

config/routes.rb

db/schema.rb

 

 コンフリクトの解消手順

※コンフリクトの解消は、GitHubから行わない‼︎

1.ローカルでmasterブランチをマージ

<ターミナル>

 git branch ※現在のブランチが作業ブランチ(masterじゃない)になっているか確認

 git fetch ※リモートブランチを取り込む

 git merge origin/master ※リモートのmasterブランチをマージ

 

2.コンフリクトしている箇所の確認

git statusを実行した際に、both added:ファイル名と書かれているファイルかコンフリクトを起こしている

・command+クリックでファイルを開く

 <<<<<<< ======= >>>>>>>が追加されている所でコンフリクトしている

 

<例>

<<<<<<<

 ******* ←今プルリクを出そうとしている変更

======

 @@@@@@@ ←すでにマージされている内容

>>>>>>>

 

3.コンフリクトの解消

・どちらを残すか、もしくは両方残すかの判断をする

・<<<<<<< ======= >>>>>>>が含まれる行は削除する

 

※db/schema.rbのコンフリクトに関して

このファイルは、マイグレーションを行った際に自動的に編集されるファイルで、エディタで直接編集せずにコマンドで対応する

 ※データベースのデータを全て消して、作成し直す方法

 ※データを残してコンフリクトを解消する手順は別記事

<ターミナル>

 rails db:migrate:reset

 

4.マージを完了させる

・git diffで差分を確認

 →<<や==が残っていないか確認

・サーバーを起動して動作確認

・コンフリクト解消後、コミット→プッシュ

 ※コミットメッセージはデフォルトをそのままでok(らしい)