在git重新启动/开发过程中,git显示以下错误消息:

fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef

我的Git版本是2.9.0。它在以前的版本中运行良好。

我如何才能继续使用新版本中引入的强制标志来允许不相关的历史?


当前回答

blue112的答案并不能解决这个问题,这是在重新定基的背景下。

同步两个分支的唯一方法是将它们合并在一起,从而产生一个额外的合并提交和两组包含相同更改的提交(原始提交和来自重新基础分支的提交)。不用说,这是一个非常令人困惑的情况。

因此,在运行git-rebase之前,请先问问自己,“还有人在看这个分支吗?”如果答案是肯定的,请把手从键盘上拿开,开始思考一种非破坏性的方法来进行更改(例如,git-restore命令)。否则,你可以随心所欲地重写历史。

参考资料:回扣的黄金法则

其他回答

首先,使用以下命令将远程更改拉到本地:

git pull origin branchname --allow-unrelated-histories

**在我的情况下,branchname是master。

当执行pull命令时,会发生冲突。你应该解决冲突。我使用Android Studio解决冲突。

当冲突解决后,合并就完成了!

现在你可以安全地推了。

在管理员在服务器端通过几百次提交将开发分支强制推送给origin/master之后,我遇到了这个错误。

嗯,我只是不想拉(fetch+merge),而是想将本地主机与远程源主机对齐。移动到一个单独的文件夹并进行Git克隆是一种方法,但我认为仅进行硬重置是更优雅的解决方案。

因此,我对这个错误的回答,在这个特定的例子中,不是上述任何一种。

我只是想要这个:

git reset --hard origin/master

尝试git pull--重新基础开发

这通常发生在您第一次提交到远程存储库时。正如错误明确指出的“拒绝合并不相关的历史”,我们需要使用--allow不相关历史标志。

git pull origin master  --allow-unrelated-histories

现在会有一些冲突,我们必须手动解决。之后,只需提交代码并推送它。

在我的案例中,错误是致命的:每次尝试都拒绝合并不相关的历史记录,尤其是远程添加Git存储库后的第一次拉取请求。

使用--allow不相关的历史标记以这种方式处理拉取请求:

git pull origin branchname --allow-unrelated-histories

根据2.9.0发行说明,git pull已被教导将--allow unrelated history选项传递给基础git merge