解决git报错fatal:refusing to merge unrelated histories的方法

不断折腾意味着不断遇到问题。最近我在同步一个深度学习课程代码库时,因为误删了本地的 .git 文件夹,遭遇了一个经典的 Git 报错。好在最终解决了,接下来我将将复盘这次错误的详细解决过程,希望对大家有用。
一、误删 .git 引发的问题
事情的起因是我不小心删除了项目根目录下的 .git 文件夹。为了挽救,我直接在当前目录执行了 git init 重新初始化了一个仓库,并尝试拉取远程代码。
当我执行 git pull upstream master 时,Git 抛出了一个致命错误:
fatal: refusing to merge unrelated histories
这是什么意思?
Git 认为我本地的代码历史和远程仓库的历史完全不是一回事。
确实,当我执行 git init 时,我创建了一个全新的、没有历史的仓库,而远程仓库已经有了很多提交记录。
在 Git 眼里,这是两个平行宇宙的项目。
二、解决方案与反思
虽然可以通过添加 --allow-unrelated-histories 参数强制合并来解决这个问题,但这往往会导致大量的冲突,解决起来更麻烦,且逻辑上并不严谨。
三、如何正确同步 Fork 的代码?
可以参考我的另一篇文章:Git 同步上游代码
最彻底的修复方案是“重新克隆”:
- 备份:先把本地修改过的代码文件备份出来;
- 重克隆:重新执行
git clone,获取一份干净的、带有完整历史记录的项目; - 恢复:将备份的代码覆盖回去。
这一步操作让我意识到,保持本地 Git 历史记录的完整性是多么重要。
总结
通过这次“误删 .git”的小插曲,让我深刻理解了 Git 的提交历史(History)机制以及远程分支管理的重要性。
希望我的经历对小伙伴有帮助。
以上关于解决git报错fatal:refusing to merge unrelated histories的方法的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 解决git报错fatal:refusing to merge unrelated histories的方法
微信
支付宝