跳到主内容
Zhimalab

解决 Git Push 报错:refusing to merge unrelated histories

2025-11-26

在初始化一个新的 Git 项目并尝试推送到 GitHub 时,你可能会遇到如下错误:

! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'github.com:username/repo.git'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally.

问题原因

这个问题通常发生在你:

  1. 在 GitHub 上创建仓库时,勾选了 “Add a README” 或 “Add a license”。这会在远程仓库创建一个初始提交。
  2. 在本地运行了 git init 创建了一个全新的仓库。
  3. 尝试将本地仓库推送到远程。

此时,Git 认为本地仓库和远程仓库是两个完全独立的项目(没有共同的提交历史),因此默认拒绝合并它们,以防止误操作。

解决方案

你需要告诉 Git 允许合并这两个不相关的历史记录。

1. 拉取并允许不相关历史

运行以下命令:

git pull origin main --allow-unrelated-histories

注意:如果你的主分支名是 master,请将 main 替换为 master

运行此命令后:

  • Git 会尝试将远程的更改(如 LICENSE 文件)拉取到本地。
  • 可能会弹出一个编辑器让你输入合并提交的信息。通常直接保存并退出即可(Vim 中输入 :wq,Nano 中按 Ctrl+X 然后 Y)。
  • 如果有文件冲突(例如两边都有 README.md),你需要手动解决冲突并提交。

2. 推送到远程

合并完成后,你就可以正常推送到远程仓库了:

git push -u origin main

现在,你的本地代码已经成功上传,并且包含了远程仓库初始化的 License 文件。