在初始化一个新的 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.
问题原因
这个问题通常发生在你:
- 在 GitHub 上创建仓库时,勾选了 “Add a README” 或 “Add a license”。这会在远程仓库创建一个初始提交。
- 在本地运行了
git init创建了一个全新的仓库。 - 尝试将本地仓库推送到远程。
此时,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 文件。