软件测试 Git:fatal refusing to merge unrelated histories错误分析与解决

93 阅读3分钟

img img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

了解详情》docs.qq.com/doc/DSlVlZExWQ0FRSE9H


这个错误通常发生在尝试合并两个不相关的Git仓库历史时。在本文中,我们将详细解释为什么会出现这个错误以及如何解决它。


#### 问题分析


这个错误的根本原因是Git无法确定两个不相关仓库的历史如何彼此关联。Git通过历史记录来跟踪每个提交的父提交,以便构建提交的关系图。当尝试合并两个没有共同祖先的历史时,Git会认为它们是不相关的,因此默认情况下拒绝合并。


这通常发生在以下情况下:


* 创建了一个新的本地仓库并进行了一些提交,然后尝试将其与远程仓库合并,但远程仓库也已经有了自己的提交历史。
* 从一个独立的仓库克隆了一个项目,并且这两个仓库没有任何历史共享。


#### 解决方法


要解决fatal: refusing to merge unrelated histories错误,我们可以采取以下几种方法:


1. `--allow-unrelated-histories`标志


使用`--allow-unrelated-histories`标志允许合并不相关的历史。这是一种解决问题的快速方法,但请谨慎使用,因为它将两个不同的历史合并到一个新的共同历史中。



git pull origin master --allow-unrelated-histories


请注意,这可能会导致冲突,我们需要解决这些冲突后再次提交。


1. 创建新分支


如果不想混合两个不相关的历史,我们可以创建一个新的分支,然后将远程仓库的内容合并到该分支中。



创建新分支

git checkout -b new-branch

拉取远程仓库内容并合并到新分支

git pull origin master

提交更改

git commit -m "Merge remote branch into new branch"

推送到远程仓库

git push origin new-branch


1. 重新克隆仓库


如果两个仓库的历史确实是完全不相关的,并且不希望将它们合并在一起,那么我们可以重新克隆一个干净的仓库。这将创建一个全新的本地仓库,不包含任何不相关的历史。



删除当前仓库目录

rm -rf your-repo-directory

重新克隆远程仓库

git clone


1. 合并并重写历史(谨慎使用)


如果确定两个仓库的历史应该合并,可以使用`--allow-unrelated-histories`标志来合并,并使用--rebase选项来重写历史以创建一个干净的合并历史。



拉取远程仓库内容并合并并重写历史

git pull origin master --rebase=interactive --allow-unrelated-histories

解决任何冲突并继续重写历史

提交更改

git commit -m "Merge and rewrite history"

推送到远程仓库

git push origin master

img img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

开源项目:docs.qq.com/doc/DSlVlZExWQ0FRSE9H