pull requestでCan’t automatically merge発生の場合の対応

※用語の定義
hogehogeブランチ => 自身が開発するブランチ
developブランチ => チームの各人が開発したブランチをmergeするブランチ

《発生した問題》
git push でリモートにあげたhogehogeブランチをdevelopブランチへpull requestしたところCan’t automatically mergeのエラーがでてmergeが出来ない。

error_img.png

《原因》
実装前にベースコードとしてローカルにpullしたdevelopブランチとリモートにあったdevelopブランチが合致しなかったので、conflictが起きていた。

※用語の定義
実装前にリモートからpullしたdevelopブランチ => developA
pull requestした際にリモートに存在していたdevelopブランチ => developA+
developブランチのコード => ベースコード

ローカルでdevelopAをベースに作成したhogehogeブランチを実装中にも、リモート側でdevelopAの実装が進み、developA+となっていた。
そうなると、pull requestを出したときに、developの部分がAとA+の差分だけ異なるので、mergeができない。
※イメージ図の左から右へ時間が経過しています。

fail.png

《解決策》
ローカル上のdevelopAをリモート上と同じdevelopA+にして(pullして)、hogehogeブランチがそのdevelopA+をmergeすれば差分がなくなり、developブランチへmergeできる。

success.png

コマンド

//hogehogeブランチにて実装完了
$ git add .
$ git commit -m "(コメント)"
$ git checkout develop
$ git pull origin develop # リモートのdevelopA+をローカルのdevelopAへpull(fetchでも良い)
$ git checkout hogehoge
$ git rebase develop # gitmerge develop でも良い
// conflictするので、conflictした箇所を修正 (hogehogeブランチの中のdevelopAの部分をdevelopA+へ変更する作業)
// conflictを修正したコードを保存
$ git add .
$ git rebase --continue
$ git push origin hogehoge -f # 強制的な force push

以上です。

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