Git拒绝合并关于rebase的无关历史

问题描述 投票:1664回答:12

git rebase origin/development期间,Git显示以下错误消息:

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

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

如何通过新版本中引入的强制标记继续使用此rebase,从而允许不相关的历史记录?

git rebase
12个回答
2173
投票

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

“git merge”用于允许合并默认情况下没有公共基础的两个分支,这导致创建现有项目的全新历史,然后由不知情的维护者提取,这允许将不必要的并行历史合并到现有项目中。默认情况下,该命令已被教导不允许这样做,并且在一个罕见的事件中使用了逃生舱口--allow-unrelated-histories选项,该事件合并了两个独立开始生命的项目的历史记录。

有关更多信息,请参阅Git release changelog

您可以使用--allow-unrelated-histories强制合并发生。


27
投票

我有同样的问题。问题是远程有什么阻止这个。

我首先创建了一个本地存储库。我添加了一个LICENSEREADME.md文件到我的本地并承诺。

然后我想要一个远程存储库,所以我在GitHub上创建了一个。在这里,我错误地检查了“使用README初始化此存储库”,这也在远程创建了README.md。

所以现在我跑的时候

git push --set-upstream origin master

我有:

error: failed to push some refs to 'https://github.com/lokeshub/myTODs.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes
(e.g. hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

现在我要克服这个问题

git pull origin master

导致以下错误:

From https://github.com/lokeshub/myTODs
branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories**

我试过了:

git pull origin master --allow-unrelated-histories

结果:

From https://github.com/lokeshub/myTODs
 * branch            master     -> FETCH_HEAD
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed;
fix conflicts and then commit the result.

解:

我删除了远程存储库并创建了一个新的(我认为只删除文件README可能有效),之后下面的工作:

git remote rm origin
git remote add origin https://github.com/lokeshub/myTODOs.git
git push --set-upstream origin master

22
投票

这对我有用:

git push origin master --force

13
投票

我也在努力解决这个问题,但我设法找到了解决方法。

当您遇到上述错误时,只需挑选合并提交然后继续rebase:

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

932
投票

就我而言,每次尝试时错误都只是fatal: refusing to merge unrelated histories,尤其是远程添加Git存储库后的第一个pull请求。

使用--allow-unrelated-histories标志以这种方式处理拉取请求:

git pull origin branchname --allow-unrelated-histories

516
投票

请尝试以下命令:

git pull origin master --allow-unrelated-histories

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


209
投票

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

git remote add origin <repository url>

当我试图推/拉时,我得到了相同的fatal: unrelated_histories错误。

以下是我修复它的方法:

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

142
投票

为此,请输入命令:

git pull origin branchname --allow-unrelated-histories

例如,

git pull origin master --allow-unrelated-histories

参考:

GitHub unrelated histories issue


95
投票

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

git pull origin master --allow-unrelated-histories 

git push origin master

73
投票
git pull origin <branch> --allow-unrelated-histories

您将被路由到Vim编辑窗口:

  • 插入提交消息
  • 然后按Ctrl + X退出Vim
  • git push --set-upstream origin <branch>

42
投票

试试git pull --rebase development


32
投票

由于所有其他答案实际上都没有回答这个问题,因此这是一个由this answer在相关问题上启发的解决方案。

所以你得到你的错误做git rebase

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

此错误实际上不会取消rebase,但您现在处于中间位置:

$ 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.
© www.soinside.com 2019 - 2024. All rights reserved.