2
1

More than 1 year has passed since last update.

プルリクで'There isn’t anything to compare.main and merge_branch are entirely different commit histories.'といわれたときにやったこと

Posted at

エラーの原因

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を使ったこと

解決方法

  1. まずリモートとローカルの差分を調べる
$ 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が変わる)ので気をつけて実行することが必要だと学びました。

初学者なので間違った解釈をしているかもしれません。
他にいい解決方法があればご教授ください!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1