- Git
refusing to merge unrelated historiesの直し方
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期連続の黒字決算。