そもそもコンフリクトとは?
直訳すると「衝突」という意味。
ファイル上で「自分の作業」と「他人の作業」が重複してしまった状態のことを指す。
発生原因
「同一ファイル」の「同一箇所」を複数人が編集した状態でマージした時に発生する。
また、ローカルブランチをpushした後にmasterブランチに変更を加えてしまうことでも発生する。
git pull –rebase
を使った対処法
<手順>
1, masterブランチを最新にして、作業ブランチをチェックアウト
$ git checkout master
$ git fetch origin
$ git pull origin master
$ git checkout [作業ブランチ]
2, 作業ブランチに対してmasterブランチをrebaseする
$ git pull --rebase origin master
3, コンフリクトがあれば直す
error: Failed to merge in the changes.
# このようなエラーが発生したらコンフリクトなので対象ファイルを修正
# 対象のファイルを開くと、コンフリクト起こした部分は以下のように表示される
<<<<<<< HEAD
[作業ブランチでの変更内容]
...
=======
[マージしたブランチでの変更内容]
...
>>>>>>> develop
コンフリクトが発生しなくなるまで上記手順を繰り返す。
git pull origin master
実行時にコンフリクトした時の対処法
<原因>
ローカルブランチをpushした後にmasterブランチに変更を加えてしまうことで、origin/master(リモートリポジトリ)とmaster(ローカルリポジトリ)の状態に差異が生じてしまっていること。
<対処法>
現在のブランチの状態を「強制的に」他のブランチの状態に合わせるときの方法として、git reset --hard
を利用する。
$ git reset --hard origin/master # 現在のブランチの状態をorigin/masterに合わせる
⚠️ git reset --hard
を実行すると手元にある作業ツリーとインデックスの変更内容は、すべてふっとんで消えてなくなるので、バックアップを取るなどして実行前は注意する必要がある。