はじめに
GitでPR作成後に先輩エンジニアから「PRをrebaseして」と言われたので、rebaseするとコンフリクトが発生したので対応方法をまとめます。
発生した課題
Gitログを確認するところ、以下の状態となっていました。
↓feature/xx
E->D->C->B->A←develop
先輩から、以下のようにコミットログをキレイにしてほしいと言われたので、rebaseすることにしました。
↓develop ↓feature/xx
A->E->D->C->B
以下のコマンドでrebaseしたところ、コンフリクトが発生しました。
git switch feature/xx
git rebase develop
Auto-merging コンフリクトファイル名
CONFLICT (content): Merge conflict in コンフリクトファイル名
error: could not apply コミットID... コミットメッセージ
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
翻訳すると、以下です。
- コミットを取り込みたい場合:コンフリクトを解決し、`git add/rm <conflicted_files>`し、`git rebase --continue`する
- コミットをスキップする場合:`git rebase --skip`をする
- rebaseを途中でやめたい場合:`git rebase --abort`する
今回はコミットを全て取り込みたかったため、git rebase --continue
をすることにしました。
対応方法
具体的には以下をコミット数分繰り返せばOKです。
- コンフリクトを解決する
git rebase --continue
を実施する
それぞれ解説します。
コンフリクトを解決する
まず、コンフリクトが発生しているファイルを開きます。
その後、そのファイルにおいてコンフリクトを解決します。
基本的には以下だと思います。
- 修正前の状態を変更する
- 修正後の状態に変更する
- 両方の状態を取り込む
自分の場合は修正後の状態に変更する
を実施しました。
git rebase --continueを実施する
git rebase --continue
を実施します。
実行後、コミットメッセージを変更する画面が表示されます。
変更する必要がなければ、変更なしでOKです。
まとめ
今回はGitでrebase時にコンフリクトが発生した際の対応方法についてまとめました。
rebaseは普段あまり使わないですし、コンフリクトが発生して対応方法に困りましたが、今回を機に冷静に対応できるようになったと思います。