エラーの原因
There isn’t anything to compare.main and merge_branch are entirely different commit histories.
エラー文から、mainとmerge_branchで異なるコミット履歴のため比較できない。関係性がないのでマージしようがないということがわかります。
私の場合は、以下の理由が原因でプルリクできませんでした。
- mainブランチをpushせずにmerge_branchをきってpushしたこと
- merge_branchのコミットを取り消して、push -fを使ったこと
解決方法
- まずリモートとローカルの差分を調べる
$ git ls-remote origin HEAD # リモートリポジトリの最新のコミットIDを確認できる
11111111 HEAD
$ git log --oneline # ローカルのコミットIDを確認できる
22222222 secound commit
33333333 first commit
同じコミットIDがないことから差分があることがわかります。
2. 次にどのブランチが古いのかを調べる
$ git remote show origin
* remote origin
・
・ 省略
・
Local refs configured for 'git push':
merge_branch pushes to merge_branch (up to date)
main pushes to main (local out of date)
最終行の1行前をみると、(up to date) とありマージしたいブランチはリモートとローカルで差がないとわかります。(マージしたいブランチの方はpush -fしていたので当たり前ですが...)
最終行は、(local out of date) とありmainブランチのローカルが古いといわれています。
よって、mainブランチをリモートと同じにすればいいことがわかります。
3. mainブランチをローカルと合わせる
$ git checkout main # mainブランチに移動する
$ git push -f origin main # リモートのコミット履歴をローカルに合わせる
$ git ls-remote origin HEAD # 一応リモートの最新のコミットIDを確認するとローカルと一致している
22222222 HEAD
これでプルリクができるようになりました。
今回はそもそもmainブランチでコミットした後にpushし忘れていたことが始まりですが、push -fはコミットの歴史を変えてしまう(コミットのIDが変わる)ので気をつけて実行することが必要だと学びました。
初学者なので間違った解釈をしているかもしれません。
他にいい解決方法があればご教授ください!