Git 拒绝合并不相关的历史。啥是“无关历史”?

Posted

技术标签:

【中文标题】Git 拒绝合并不相关的历史。啥是“无关历史”?【英文标题】:Git refusing to merge unrelated histories. What is 'unrelated histories'?Git 拒绝合并不相关的历史。什么是“无关历史”? 【发布时间】:2017-12-29 13:28:37 【问题描述】:

在我的本地,我创建了新的文本文件 -> git add newfile.txt -> commit -> pull origin master -> ERROR!

“拒绝合并不相关的历史”。

什么是无关历史? , 相关历史是什么?

【问题讨论】:

你做了什么来设置你的本地存储库?你跑git init + git remote add ...了吗?遥控器是什么,你想做什么? 一个分支指向一个提交。非根提交有一个或多个父提交,每个父提交都有自己的一个或多个父提交。当两个分支在其历史上没有任何共同祖先时,它们是不相关的。 感谢您的 cmets!我只是想知道什么“不相关的历史”不能解决我的问题。 Git refusing to merge unrelated histories的可能重复 这里有更好、更包容的答案***.com/questions/37937984/… 【参考方案1】:

我认为您已在远程存储库中提交,当您拉取此错误时会发生。

使用这个命令

git pull origin master --allow-unrelated-histories
git merge origin origin/master

【讨论】:

我建议阅读***.com/questions/39761024/… 此解决方案很有帮助,但请注意,OP 实际上想要 理解 而不是修复。因此,上述问题中线程化的 cmets 实际上更有帮助。 (我也有同样的问题;我知道如何解决它,但从来不知道“它”是什么……我不明白“不相关的历史”到底是什么意思。) @jitter 指向的链接给出了一个完美且详细的答案。 当我必须创建一个带有许可证提交的新 GitHub 存储库并与我已经旧的项目合并时,这很有效。我想最好的解决方案是先推送,然后添加其他内容。但万一你犯了我的错误,有人知道如何正确地做到这一点吗? 这是一个不错的答案,但有关更多详细信息,您可以查看此问题***.com/questions/37937984/…【参考方案2】:

当本地.git 子目录不知何故丢失时,整个项目似乎不知从何而来,因为所有本地更改历史记录都包含在.git 中。因此,您的本地更改变得无关紧要。这就是为什么所有的更改都被称为unrelated histories

在这种情况下,git merge or pull 请求将无法跟踪您在远程项目中所做的更改以添加。因此,出现" refusing to merge unrelated histories"- 错误。

在这种情况下,如果您尝试通过以下命令强制合并,

git pull origin master --allow-unrelated-histories

git merge origin origin/master

它会产生很多冲突,因为它无法找到您本地更改的历史记录。

【讨论】:

【参考方案3】:

我遇到了类似的问题,我从第二个遥控器引入了一个分支,并希望与第一个遥控器的一个分支合并。这与现有答案不同,因为我没有在拉取时使用 --allow-unrelated-histories,而是在合并时使用。

git checkout master
git merge --allow-unrelated-histories myfunnybrancy

【讨论】:

这正是我所需要的。我为我创建了一个带有开发分支的存储库(其中包含一个 gitignore)。我的本地仓库是一个主分支。我设置了远程原点,然后推送了我的主分支。然后,我想将 master 合并到几乎空的开发中,这样它们就可以同步进行进一步的开发。这成功了。【参考方案4】:

git pull origin master --allow-unrelated-histories

【讨论】:

【参考方案5】:

我在 GitHub Enterprise 中重命名存储库之一时遇到了这个问题,然后按照以下步骤制作相同的以前命名的存储库。

    在远程创建 repo sample 将其克隆到本地 将远程重命名为old-sample 在远程创建一个名为 sample 的新仓库 尝试从本地推送 发生错误。

奇怪的是我删除了本地 repo,但 git 试图克隆旧的,即使我尝试通过新创建的 repo url 克隆。克隆 url 只是自动重定向到旧的,即使新的 URL 存在于远程。我不知道这个原因是来自服务器或本地 git 进程。

因此,该错误是由于 git 进程无法将其本地提交历史与远程历史进行比较。

不相关的历史可以说明上述情况。

我最终删除了远程重命名的旧仓库并解决了。

【讨论】:

以上是关于Git 拒绝合并不相关的历史。啥是“无关历史”?的主要内容,如果未能解决你的问题,请参考以下文章

致命:添加 git remote 后拒绝合并不相关的历史记录

Git 因致命错误而失败。拒绝将不相关的历史与 git push 合并?

将项目上传到github时如何解决“拒绝合并不相关的历史”?

常见问题

git fatal: 拒绝合并无关的历史的错误解决

text 致命的:拒绝合并不相关的历史