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


git rebase origin/development 以下错误消息显示在git中:

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

我的git版本是2.9.0。用于在以前的版本中正常工作。

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


994
2018-06-21 07:23


起源


@Shubam Chaudhary请以最多的票数接受答案,以便人们可以轻松找到答案 - Asif Mohammed
@Shishya尽管得到了应有的尊重,但最多投票的答案却没有直接解决这个问题。问题要求 git-rebase 情况虽然答案给了一个标志 git-merge - Shubham Chaudhary
@AsifMohammed那不是什么意思 接受了答案 是为了。人们会的 自动 找到答案最多的答案,因为默认的选票排序。 - Glorfindel
可能重复 允许在git rebase中合并不相关的历史记录 - vossad01
这里有一个混乱的事实 标题没有指明这是在rebase的上下文中,因此您的问题是在Google员工中绘制,他们在不同的上下文中收到此错误并提出一个实际上并不适用于您提出的问题的答案。它现在无法轻松清理,因此不连贯的问答对将保留在网站上,并永远保留在Google搜索结果中。故事的寓意是问题标题很重要! - Mark Amery


答案:


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

“git merge”用于合并两个没有共同点的分支      默认情况下,这导致了现有的全新历史      项目创建,然后由一个毫无戒心的维护者拉,      这允许将不必要的并行历史合并到      现有项目。该命令已被教导 不允许这样做      默认,带逃生舱口 --allow-unrelated-histories 选项      用于合并两个项目历史的罕见事件      那是独立开始的。

git发布更改日志 了解更多信息。

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


1350
2018-06-21 07:26



知道合并更改但此选项不适用于rebase - Shubham Chaudhary
有没有可以打开的选项 --allow-unrelated-histories 永久? - jmarceli
@jmarceli“因为这样的”两个项目合并“是一个罕见的事件,所以不会添加总是允许这种合并的配置选项。”所以不行。 - blue112
我试图以这种方式合并一个不同的repo分支,但它在我当前的分支上创建了一个新的提交,并没有保留其他repo的历史记录。然后我从另一个repo检出了一个本地分支,然后才合并它,突然出现了正常的合并提交。奇怪的。 - mgol
优秀,合作 git pull 同样。是在那个“罕见的事件,融合了独立开始他们生活的两个项目的历史”。 git --work-tree="." pull --allow-unrelated-histories - Petru Zaharia


就我而言,错误只是 fatal: refusing to merge unrelated histories 在远程添加git repo之后的每个特别是第一次拉取请求。

运用 --allow-unrelated-histories flag以这种方式处理pull请求:

git pull origin branchname --allow-unrelated-histories


553
2017-10-18 12:13



我总是看到这个错误,如果我用README.md创建一个新的Github存储库,然后在第一次将它拉到本地存储库。很烦人。 - Tien Do
@TienDo看到这个答案: stackoverflow.com/questions/39761024/... - adi
对于新的回购,首先是拉动,通常最好从a开始 git clone。 - Umbrella
与我的错误相同。对。 - MD XF
@PardeepJain请看这个 github.com/git/git/blob/master/Documentation/RelNotes/... - adi


请尝试以下命令

git pull origin master --allow-unrelated-histories

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


301
2017-11-20 16:41



我也做了一个 git push origin master 它的工作原理! - Matheus Abreu
合并提示出现并在合并过程后一切都很好。非常感谢。 - Orhaan
是的,它的工作谢谢 - Zeeshan Ali


我首先设置本地存储库时遇到此错误。然后去了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

161
2018-06-08 17:41



我想我们在同一条船上。添加一些东西:我的问题是远程仓库上已有东西。所以在我的文件夹中,它删除了 .git 文件夹,跑了 git init 并且做了Adithya所说的,除了合并部分。 - codepleb
如何在mac上按INSERT按钮?实际上,我必须输入提交消息并从命令行进行合并,但我不知道如何从命令行执行此操作。 - Shajeel Afzal
它打开vim吗?如果是这样,它只是SHIFT +: - Adithya Bhat
甚至我首先创建了GitHub repo,并且正在执行添加repo的命令。 - Mr. Suryaa Jha
这是一个非常好的答案。关键是你必须强制拉动然后合并本地和远程仓库。 - alanwsx


尝试 git pull --rebase development


32
2018-01-20 14:05



这解决了我的问题。问题是如何开始的 - Harlan Nelson


我也很努力,但设法找到了解决方法。

当你遇到上面的错误时,只需选择合并提交,然后继续使用rebase:

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

6
2017-08-30 15:20





由于所有其他答案实际上都没有回答这个问题,因此这是一个灵感来自的解决方案 这个答案 在一个相关的问题上。

所以你得到你的错误做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.

5
2018-06-22 09:04