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

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

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

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


当前回答

由于您既不能推,也不能拉和推,也无法合并拉和推:

您可以在GitHub存储库上创建一个新分支。然后:git添加。gitcommit-m'commitName'并在终端的当前目录中引用该分支。git branch-m master branchNamegit push-f原始分支名称您的代码将被推送到新的分支。然后你可以合并这两个分支。

这对我有用。

其他回答

在进行git拉动时,我得到了一条致命的消息:拒绝合并不相关的历史记录我有一段时间没有更新本地副本的回购模块。

我运行这个命令只是为了从原点刷新本地。我只想要远程的最新版本,不需要任何本地更改。

git reset --hard origin/master

这解决了我的问题。

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

git pull origin branchname --allow-unrelated-histories

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

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

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

现在你可以安全地推了。

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

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

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

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

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

我也有同样的问题。试试看:

git pull origin master --allow-unrelated-histories 

git push origin master

由于所有其他答案实际上都没有回答这个问题,所以这里有一个由这个相关问题的答案启发的解决方案。

因此,您在执行git rebase时出错:

$ git rebase origin/development
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef

此错误实际上并没有取消基,但您现在正处于其中:

$ git status
interactive rebase in progress; onto 4321beefdead
Last command done (1 command done):
   pick 1234deadbeef1234deadbeef test merge commit

现在您可以手动进行合并。查找原始合并提交的父提交:

$ git log -1 1234deadbeef1234deadbeef
commit 1234deadbeef1234deadbeef
Merge: 111111111 222222222
Author: Hans Dampf
Date:   Wed Jun 6 18:04:35 2018 +0200

    test merge commit

找出两个合并父级中的哪一个是合并到当前父级的父级(可能是第二个,请使用git日志222222222进行验证),然后手动进行合并,复制原始合并提交的提交消息:

$ git merge --allow-unrelated 222222222 --no-commit
Automatic merge went well; stopped before committing as requested
$ git commit -C 1234deadbeef1234deadbeef
[detached HEAD 909af09ec] test merge commit
 Date: Wed Jun 6 18:04:35 2018 +0200
$ git rebase --continue
Successfully rebased and updated refs/heads/test-branch.