fatal: refusing to merge unrelated histories は、共通の祖先(元になったコミット)が1つもない2つの履歴を、git が merge しようとして止めたエラーです。 いちばん多いのは、GitHub で README 付きのリポジトリを作り、手元で別に作ったプロジェクトを push しようとしたときです。

状況 直し方
GitHub に README・LICENSE だけがあり、手元のプロジェクトと合わせたい git pull --rebase origin main(履歴が一直線になる)、または --allow-unrelated-histories で merge
別のリポジトリを origin にしてしまった merge しない。git remote -v で URL を確かめて直す
2つのプロジェクトを、履歴ごと1つにまとめたい --allow-unrelated-histories で merge

確認環境:git 2.43.0(確認日 2026年10月11日)。README だけを入れたリモートと、手元で git init したプロジェクトで再現しました。

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「refusing to merge unrelated historiesの直し方」

再現:push → pull → このエラー、の順に出る

最初に出るのは、このエラーではありません。 手元で git init → commit → git remote add origin ... → push、と進めると、次の順番でエラーが出ました。

1. push が拒否される

$ git push origin main
 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to '../remote.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. ... use 'git pull' before pushing again.

リモートには README のコミットがあり、手元には無いため、push できません。案内どおり pull します。

2. pull で「どう合わせるか」を聞かれる

$ git pull origin main
hint: You have divergent branches and need to specify how to reconcile them.
hint:   git config pull.rebase false  # merge
hint:   git config pull.rebase true   # rebase
hint:   git config pull.ff only       # fast-forward only
fatal: Need to specify how to reconcile divergent branches.

pull の方法(merge か rebase か)を設定していないと、ここで止まります。

3. merge を選ぶと、このエラー

$ git pull --no-rebase origin main
fatal: refusing to merge unrelated histories
$ git merge-base HEAD origin/main      ← 共通の祖先を探す
(何も表示されず、終了コード 1)       ← 共通の祖先が無い

手元の最初のコミットと、GitHub の最初のコミット(Initial commit)は、まったく別に作られたため、つながりがありません。git は「別々のプロジェクトを誤って混ぜようとしているかもしれない」と判断して止めます。

まず確認:本当に合わせてよいリポジトリか

このエラーは、取り違えたリポジトリを混ぜないための安全装置です。オプションを付ける前に、リモートの中身を確かめます。

git remote -v                          # origin の URL が正しいか
git fetch origin
git log --oneline origin/main          # リモートのコミット
git ls-tree -r --name-only origin/main # リモートのファイル一覧
$ git log --oneline origin/main
ef6724e Initial commit
$ git ls-tree -r --name-only origin/main
README.md                               ← README だけ。合わせてよい
リモートの中身 判断
README・LICENSE・.gitignore だけ(作ったばかり) 合わせてよい
知らないファイル・大量のコミット URL の取り違え。git remote set-url origin 正しいURL
自分のプロジェクトの別の版(以前 push したもの) 手元が git clone し直しでなく別に git init したもの。どちらを正にするか決める

直し方1:pull --rebase(おすすめ)

git pull --rebase origin main
git push origin main
Successfully rebased and updated refs/heads/main.
* 6e15fc9 first                ← 手元のコミットが
* b5e7d09 Initial commit       ← GitHub の README のコミットの上に乗った
   b5e7d09..6e15fc9  main -> main    ← push も成功

rebase では、--allow-unrelated-histories を付けなくても通りました。 手元のコミットを、リモートの最新のコミットの上に載せ直すため、merge のコミットができず、履歴が一直線になります。README が両方にあって内容が違う場合は、rebase の途中で競合として止まりました(Could not apply ... first)。README を直して git add → git rebase --continue で進めます。

直し方2:--allow-unrelated-histories で merge

git pull --no-rebase --allow-unrelated-histories origin main
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

手元とリモートの両方に README.md があると、add/add の競合になりました。

<<<<<<< HEAD
# myapp (local)
=======
# myapp
>>>>>>> ef6724e...
# README.md を残したい内容に書き直してから
git add README.md
git commit -m "Merge remote README"
git push origin main
*   8a660d9 Merge remote README
|\
| * ef6724e Initial commit
* 2b69522 first

2つの履歴が、merge のコミットでつながりました。 git 公式ドキュメントでも、このオプションは「別々に始まった2つのプロジェクトの履歴を merge するとき」のためのもので、めったにないため、常に有効にする設定は用意しないとされています。

方法 履歴 向いている場面
pull --rebase 一直線(merge コミットなし) 作ったばかりのリポジトリに、手元のプロジェクトを載せる
--allow-unrelated-histories 2本の履歴が merge でつながる 2つのプロジェクトを、両方の履歴を残して1つにする

そもそも起こさない手順

手順 内容
GitHub でリポジトリを作るとき、README などを追加しない 空のリポジトリなら、手元の push がそのまま通る
先に GitHub で作って git clone し、そこにファイルを置く 最初から同じ履歴の上で作業できる
空でないなら、最初に git pull --rebase 上の直し方1

強制 push(--force)で上書きする方法について

git push --force origin main で、リモートの README のコミットを消して手元の履歴で上書きすることもできます。作ったばかりで、自分しか使っていない・リモートの README が要らない場合に限ります。ほかの人がすでに clone・push しているリポジトリでは、その人たちのコミットを消してしまうため使いません。

確認の手順(チェックリスト)

順番 確認すること 方法
1 origin の URL git remote -v
2 リモートの中身 git log --oneline origin/main、git ls-tree -r --name-only origin/main
3 共通の祖先があるか git merge-base HEAD origin/main(何も出なければ無い)
4 合わせ方 作ったばかりなら pull --rebase、2つの履歴を残すなら --allow-unrelated-histories
5 競合 README・.gitignore など両方にあるファイルを直す
6 次から GitHub で作るときに README を追加しない、または先に clone

よくある質問

Q. ブランチ名が master と main で違います。 A. 手元が master、GitHub が main のように違うと、git push origin master で別のブランチができます。git branch -m main で手元の名前を合わせてから、上の手順で進めます。

Q. pull するたびに方法を聞かれます。 A. git config --global pull.rebase true(rebase)か false(merge)を一度設定すると、聞かれなくなります。

まとめ

  • 共通の祖先がない2つの履歴を merge しようとすると出る。典型は README 付きで作った GitHub のリポジトリ
  • エラーは push rejected → divergent branches → このエラーの順に出る
  • オプションを付ける前に、git remote -v と git log origin/main で、合わせてよい相手か確かめる
  • 作ったばかりのリポジトリなら git pull --rebase が素直(オプション不要、履歴が一直線)
  • 両方の履歴を残すなら --allow-unrelated-histories。README は add/add の競合になる
  • 次からは README なしで作るか、先に clone する

参考・出典

確認日はいずれも 2026年10月11日です。

  • Git ドキュメント「git-merge」(--allow-unrelated-histories):https://git-scm.com/docs/git-merge

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「refusing to merge unrelated historiesの直し方」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?