Gitでrebase時にコンフリクトが発生した際の対応方法

Git

はじめに

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は普段あまり使わないですし、コンフリクトが発生して対応方法に困りましたが、今回を機に冷静に対応できるようになったと思います。

タイトルとURLをコピーしました