「fatal: refusing to merge unrelated histories」の原因と解決法

Gitで「fatal: refusing to merge unrelated histories」が発生する原因とその具体的な対処法を解説します。初回のpullで履歴が一致しないケースなど、初心者がよく直面するトラブルをわかりやすく整理。

このエラーはなぜ起こる?

fatal: refusing to merge unrelated histories
は、Gitで
git pull
を実行した際にローカルとリモートの履歴が全く異なる場合に発生します。つまり、履歴に共通の祖先(共通コミット)が存在しない状態でマージしようとすると、Gitは自動的な統合を拒否します。


よくある原因

1. ローカルとリモートが別々に初期化されている

  • ローカルで
    git init
    を行って開発を始めたが、その後 GitHub に新しく作成したリポジトリにpushしようとした
  • GitHub上にはREADMEやLICENSEなどが既に含まれている

2. GitHubのテンプレート機能を使って初期化された

  • 自動生成されたコミットが最初に存在するため、ローカルとの接点がない

3. 別のプロジェクトを間違って上書きしようとした

  • 無関係な履歴を持つリポジトリ同士を統合しようとした

解決方法:--allow-unrelated-historiesオプションを使う

git pull origin main --allow-unrelated-histories

このオプションを付けることで、Gitは「別々の履歴でも強制的にマージしてもよい」と認識し、マージ処理が実行されます。


マージ後に競合が発生した場合

このエラーの後にマージが成功しても、ファイルの内容が競合する場合は、以下のようなマージマーカーが表示されます:

<<<<<<< HEAD
あなたの変更
=======
リモートの変更
>>>>>>> origin/main

解決手順

  1. 手動でどちらの変更を残すか選択し、ファイルを修正
  2. 修正したファイルをステージング
git add ファイル名
  1. マージ完了のコミット
git commit

回避策とベストプラクティス

  • 初回pushの前に、GitHubのリポジトリを空(READMEなし)で作成する
  • 既存のREADME等がある場合は、ローカルでもcloneしてから開発を始める
  • git remote add origin
    で接続したあと、最初のpullでこのエラーが出たら落ち着いてオプション付きで実行

まとめ

「fatal: refusing to merge unrelated histories」は、ローカルとリモートの履歴がつながっていない状態でマージしようとすると発生します。エラーが出たら慌てず、

--allow-unrelated-histories
を使ってマージし、必要に応じて競合を手動で解決しましょう。

編集部

編集部

「fatal: refusing to merge unrelated histories」の原因と解決法