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

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

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

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


当前回答

警告:这可能会覆盖远程存储库

这对我有用:

git push origin master --force

其他回答

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

git pull origin branchname --allow-unrelated-histories

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

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

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

现在你可以安全地推了。

我也犯了同样的错误,这个命令对我有效:

git pull gitlab master --allow-unrelated-histories

请注意,在您的案例中,gitlab可能是origin或heroku。

您可以使用--允许不相关的历史记录强制合并。

这背后的原因是自Git 2.9以来,默认行为发生了变化:

“gitmerge”用于合并两个没有公共项的分支默认情况下,这导致了现有项目被创建,然后被一个不知情的维护人员拉住,这允许将不必要的并行历史合并到现有项目。命令已被教导不允许这样做默认情况下,带有转义线--允许不相关的历史记录选项用于合并两个项目历史的罕见事件独立开始他们的生活。

有关更多信息,请参阅Git发布变更日志。

更多信息可以在这个答案中找到。

我也很挣扎,但我设法找到了解决办法。

当您遇到上面的错误时,只需选择合并提交,然后继续重新启动:

git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue

我认为这是一种非常罕见的情况;您已删除远程(例如,原点):

git remote rm origin

然后,过了一段时间,出于某种原因,您尝试将其添加回去,但输入了错误的URL。

git remote add origin git@github.com:example/wrong.git

当然,解决方案是使用正确的URL:

git remote add origin git@github.com:example/correct.git