コンフリクト解消の手順、VSCode操作
pushする前に、git pull --rebase origin mainでmainの変更を取り込んだ時、mainと自分のブランチの同じ箇所でコンフリクトが起こる(同じところにコード書いてしまってる)ので、どちらをどう取り込むか修正した上で pushしないといけない
コンフリクトは、自分がpushしたい最新のコミットだけでなく、過去のコミットでも起こる可能性がある
例えば、過去のコミットAを作った際にrebaseした時、mainとコンフリクト発生してなかったが、
その後自分が色々修正して新しくコミットBを作ってrebaseした時、取り込んだ最新のmainとAで追記した箇所がコンフリクト起こる、ということがある(今回私が遭遇したのはそれ)
git pull --rebase origin mainでコンフリクト起きた時は、VSCodeに以下のような画面が出る。
https://gyazo.com/90eaebaf5c66a4e107e9e213cf01aba2
Current Changeがmain側のコード、Incoming Changeが自分のブランチで競合してる部分のコード
VScodeの操作
Accept Current Changes(現在の変更)は、mainの変更を採用する
Accept Incoming Changes(入力側の変更)は、自分のブランチのコードを採用する
Accept Both Changesは、両方の変更を採用する(取り込む)
今回は、同じテストファイルの一番下が競合していた = mainの方でも私が追記した部分に、新しくテストが追加されてたことによりコンフリクト発生。なので、Accept Both Changesして、endとか追加したり微調整した
このボタンをクリック
https://gyazo.com/357afcb353abf837776492ecce2a910b
コンフリクト発生したファイルの横の+ボタンクリック
これはgit add {コンフリクト解消したファイルを指定}と一緒!
git status とか見ると分かりやすい
→ $ git rebase --continueする
コンフリクト発生によってrebase失敗 (main取り込み失敗)していたのを、もう一度行ってくれる。
成功するとコンフリクトが起こったコミットのコミットメッセージを変更できるファイルがVSCodeで自動的に開かれる。変更しないなら普通にファイルを閉じれば、処理が先に進み、rebaseの続きをする。
これで、自分が行った過去のコミットでコンフリクト解消していても、その後のコミットでコンフリクトが起こっていたら、また直してね、という指示が出る
コンフリクトが起こっていないと、Sccessfully~とrebase成功したと表示される
→$ git push origin {ブランチ名} --force-with-lease
✅コマンド
$ git rebase --abort
rebaseした後のコンフリクト解消を失敗した時、これを実行すると、git pull rebase --origin mainする直前に戻せる!
なのでコンフリクト解消失敗したら、git rebase --abort→git pull rebase --origin mainして、コンフリクト解消再チャレンジを一からできる✨