目的
今回は以下を行っていきます。
- gitでconflictが発生する状況をちょっとだけ理解してみる
- 実際にconflictを発生させてみる
- 発生したconflictをVSCode上で解決してみる
※間違いや分かりにくい点は、どんどん指摘してもらえると助かります。(お手柔らかによろしくお願いします。。)
conflictって何??
簡単にconflictの発生する可能性のある作業フローのイメージを用意しました。
以下の手順で作業していくと仮定します。
- まず、Masterを元にしてBranch_AとBranch_Bを作成します。
- Branch_Aで、あるファイル(ここでは、conflict.txtとしておきます。)を修正します。
修正した分をcommitしてMasterにPullRequestを行います。
Masterに対して変更分をマージします。 - 次にBranch_Bでの作業に移ります。ここでもconflict.txtを修正します。(Branch_Aでの修正とは異なるようにすること)
修正が完了したらcommitして、MasterにPullRequestを行います。
これでconflictが発生します。
つまり、複数人で開発している際に各々が別々のファイルで作業している分にはMasterに対して変更分がそのまま吸収されていきますが
同じファイルを修正していた際に、どちらの修正をMasterに反映させるか(あるいは、どちらの修正も反映させる)を判断してねと言われるのがconflictです。
conflictを日本語にすると『衝突』と言う意味になります。
実際にconflictを発生させてみよう!
理解できているかを判定するのに、自分の環境でも発生させてみます。
①Branch_Aで修正
今回はconflict.txtに文章を追加しています。 |
これをcommitしてGitHub上でPullRequestをします。 |
今の段階ではconflictが発生しないので、そのままmergeします。 |
②Branch_Bで修正
①と同様にconflict.txtに文章を追加しています。
これをcommitしてGitHub上でPullRequestをします。
conflictが発生しました。
ここからは、VSCode上でconflictの原因を調査していきます。
VSCode上でconflict解消を行う
具体的には以下の手順で行います。
- ローカルに保存してあるmasterを最新にする
- Branch_Bに対して、masterをMergeする
- Mergeした際にBranch_B上でconflictが発生して、VSCode上で確認できるので解消する
- 解消した分をcommitしてPushして、MergePullRequestができるようになっていることを確認
1.ローカルに保存してあるMasterを最新にする
masterに移動 git checkout master
masterの最新を取得 git pull
2. Branch_Bに対して、masterをMergeする
Branch_Bに移動 git checkout Branch_B
Branch_BにmasterをMergeする git merge master
3. Mergeした際にBranch_B上でconflictが発生して、VSCode上で確認できるので解消する
Accept Both Changeを選択します。
4. commitしてPush、MergePullRequestができるようになっていることを確認
あとは、MergePullRequestをして完了!
まとめ
今回は単純なconflictを発生させて、それを解消する手順をまとめてみました。
しかし、ファイルの編集でのconflict以外にもファイルの存在に関わるconflictもあります。
色々なパターンを再現してみて、実務に役立てればいいかなと思っています。