Git 拒绝合并基础上无关的历史记录

git rebase origin/development过程中,Git 显示以下错误消息:

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

我的 Git 版本是 2.9.0。以前在以前的版本中可以正常工作。

如何在新版本中引入强制标记的情况下继续进行此基础更改,以允许不相关的历史记录?

答案

自 Git 2.9 起,默认行为已更改:

“git merge” 用于允许默认情况下合并没有共同基础的两个分支,这导致创建现有项目的全新历史记录,然后由毫无戒心的维护者提取,从而允许不必要的并行历史记录合并到现有项目中。该命令已被--allow-unrelated-histories 默认情况下不允许这样做,在一个罕见的事件中使用了逃生阴影--allow-unrelated-histories选项,该事件合并了两个独立启动项目的历史。

有关更多信息,请参见Git 发行变更日志

您可以使用--allow-unrelated-histories强制进行合并。

以我为例,该错误只是fatal: refusing to merge unrelated histories每次尝试都fatal: refusing to merge unrelated histories ,尤其是在远程添加 Git 存储库后的第一个请求请求。

使用--allow-unrelated-histories标志可通过以下方式处理请求请求:

git pull origin branchname --allow-unrelated-histories

尝试以下命令:

git pull origin master --allow-unrelated-histories

这应该可以解决您的问题。

首先设置本地存储库时出现此错误。然后我去了 GitHub 并创建了一个新的存储库。然后我跑了

git remote add origin <repository url>

当我尝试推动或拉动时,我得到同样的fatal: unrelated_histories错误:每次都出现fatal: unrelated_histories错误。

这是我的解决方法:

git pull origin master --allow-unrelated-histories
git merge origin origin/master
... add and commit here...
git push origin master

为此,输入命令:

git pull origin branchname --allow-unrelated-histories

例如,

git pull origin master --allow-unrelated-histories

参考:

GitHub 无关历史记录问题

git pull origin <branch> --allow-unrelated-histories

您将被带到 Vim 编辑窗口:

  • 插入提交消息
  • 然后按Esc 键 (退出 “插入” 模式),然后按:(冒号),然后按x (小 “x”),最后按 Enter 键退出 Vim。
  • git push --set-upstream origin <branch>

我有同样的问题。尝试这个:

git pull origin master --allow-unrelated-histories 

git push origin master

尝试git pull --rebase development

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

这为我工作:

git push origin master --force

由于所有其他答案均未真正回答该问题,因此,这里有一个受此答案启发而提出的解决方案。

所以你在执行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 log 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.