在git重新启动/开发过程中,git显示以下错误消息:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
我的Git版本是2.9.0。它在以前的版本中运行良好。
我如何才能继续使用新版本中引入的强制标志来允许不相关的历史?
在git重新启动/开发过程中,git显示以下错误消息:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
我的Git版本是2.9.0。它在以前的版本中运行良好。
我如何才能继续使用新版本中引入的强制标志来允许不相关的历史?
当前回答
您可以使用--允许不相关的历史记录强制合并。
这背后的原因是自Git 2.9以来,默认行为发生了变化:
“gitmerge”用于合并两个没有公共项的分支默认情况下,这导致了现有项目被创建,然后被一个不知情的维护人员拉住,这允许将不必要的并行历史合并到现有项目。命令已被教导不允许这样做默认情况下,带有转义线--允许不相关的历史记录选项用于合并两个项目历史的罕见事件独立开始他们的生活。
有关更多信息,请参阅Git发布变更日志。
更多信息可以在这个答案中找到。
其他回答
在我的案例中,错误是致命的:每次尝试都拒绝合并不相关的历史记录,尤其是远程添加Git存储库后的第一次拉取请求。
使用--allow不相关的历史标记以这种方式处理拉取请求:
git pull origin branchname --allow-unrelated-histories
根据2.9.0发行说明,git pull已被教导将--allow unrelated history选项传递给基础git merge
我运行了这个命令,问题得到了解决。
git pull origin branchName --allow-unrelated-histories
查看此页面了解更多信息。
我也有同样的问题。试试看:
git pull origin master --allow-unrelated-histories
git push origin master
blue112的答案并不能解决这个问题,这是在重新定基的背景下。
同步两个分支的唯一方法是将它们合并在一起,从而产生一个额外的合并提交和两组包含相同更改的提交(原始提交和来自重新基础分支的提交)。不用说,这是一个非常令人困惑的情况。
因此,在运行git-rebase之前,请先问问自己,“还有人在看这个分支吗?”如果答案是肯定的,请把手从键盘上拿开,开始思考一种非破坏性的方法来进行更改(例如,git-restore命令)。否则,你可以随心所欲地重写历史。
参考资料:回扣的黄金法则
如果您有存储库的浅Git克隆,也会发生这种情况。
我最近在CI/CD设置中遇到了这个问题,以前的解决方案都不适合我。我正在构建一个CI/CD管道,以分析MR源分支的MR创建代码。为此,我需要在main分支上运行一次分析,然后在与main合并的MR源分支上运行分析,在尝试通过gitmerge命令合并分支时出现了这个错误。
CI/CD设置中出现这种情况的原因:通常在CI/CD环境中,Git存储库是一个用来加快速度的浅层克隆,它不包括完整的提交历史,因此,在合并Git时,我们可能会认为我们正在尝试合并不相关的分支,这实际上是不正确的。
解决方案:
使用以下命令将浅存储库转换为非浅存储库:
git fetch --unshallow