Git报错:fatal:refusing to merge unrelated histories问题解决过程
最近我在同步一个深度学习课程代码库时,因为误删了本地的 .git 文件夹,遭遇了一个经典的 Git 报错。
本文将复盘这次错误的解决过程。
1. 事故现场:误删 .git 引发的问题
事情的起因是我不小心删除了项目根目录下的 .git 文件夹。为了挽救,我直接在当前目录执行了 git init 重新初始化了一个仓库,并尝试拉取远程代码。
然而,当我执行 git pull upstream master 时,Git 抛出了一个致命错误:
fatal: refusing to merge unrelated histories
这是什么意思?
Git 认为我本地的代码历史和远程仓库的历史完全不是一回事。
确实,当我执行 git init 时,我创建了一个全新的、没有历史的仓库,而远程仓库已经有了很多提交记录。
在 Git 眼里,这是两个平行宇宙的项目。
2. 解决方案与反思
虽然可以通过添加 --allow-unrelated-histories 参数强制合并来解决这个问题,但这往往会导致大量的冲突,且逻辑上并不严谨。
3.如何正确同步 Fork 的代码?
可以参考我的另一篇文章:Git同步上游代码
最彻底的修复方案是“重新克隆”:
- 备份:先把本地修改过的代码文件备份出来。
- 重克隆:重新执行
git clone,获取一份干净的、带有完整历史记录的项目。 - 恢复:将备份的代码覆盖回去。
这一步操作让我意识到,保持本地 Git 历史记录的完整性是多么重要。
4.总结
通过这次“误删 .git”的小插曲,我深刻理解了 Git 的提交历史(History)机制以及远程分支管理的重要性。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
关于VSCode 装好ESLint 插件 import 报黄线的问题
这篇文章主要介绍了VSCode 装好ESLint 插件 import 报黄线的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-11-11
ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER方法探讨
ASP,PHP与.NET伪造HTTP-REFERER方法及防止伪造REFERER方法探讨...2007-03-03
json转String与String转json及判断对象类型示例代码
正如标题所言json转String和String转json以及判断对象类型,在网上会搜到很多的相关文章,不过大都介绍的笼统,下面有个不错的示例,感兴趣的朋友可以参考下2013-10-10
git远程操作异常:correct access rights问题及解决
这篇文章主要介绍了git远程操作异常:correct access rights问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-03-03
关于提交项目到gitee报错Push to origin/master was rejected的问题
这篇文章主要介绍了提交项目到gitee报错Push to origin/master was rejected的解决办法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-10-10


最新评论