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

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

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

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


当前回答

1.解决问题

执行git pull原始主机时出现以下错误:

fatal: refusing to merge unrelated histories

运行以下命令之一

 # It could be master
 git pull origin master --allow-unrelated-histories

 # Or main
 git pull origin main --allow-unrelated-histories

 # Or just try with origin
 git pull origin main --allow-unrelated-histories

如果它打开nano编辑器,您只需按Ctrl+X保存并关闭即可。

现在在本地推送更改

 git push

2.含义

错误:

当两个不相关的项目(即,不知道彼此存在且提交历史不匹配的项目)合并时,会出现“致命:拒绝合并不相关的历史”Git错误。

getmerge命令(来自GitHub文档):--允许不相关的历史记录:--允许不相关的历史记录

默认情况下,gitmerge命令拒绝合并不共享共同祖先的历史记录。当合并两个独立启动的项目的历史记录时,可以使用此选项覆盖此安全性。由于这是非常罕见的情况,因此默认情况下没有启用此功能的配置变量,也不会添加。


工具书类

推荐:“致命:拒绝合并不相关的历史”Git错误Git 2.9发行说明


有关堆栈溢出的更多信息

推荐使用--允许不相关的历史记录的一个很好的解释和警告:在拉到恢复的存储库时“拒绝合并不相关的记录”失败如果--允许不相关的历史记录不起作用:添加Git远程后“致命:拒绝合并不相关历史记录”Git拒绝合并不相关的历史。什么是“无关历史”?该用户使用GitHub桌面:如何解决在将项目上传到GitHub时“拒绝合并不相关的历史记录”的问题?Git失败,出现致命错误,拒绝将无关历史与Git推送合并

其他回答

1.解决问题

执行git pull原始主机时出现以下错误:

fatal: refusing to merge unrelated histories

运行以下命令之一

 # It could be master
 git pull origin master --allow-unrelated-histories

 # Or main
 git pull origin main --allow-unrelated-histories

 # Or just try with origin
 git pull origin main --allow-unrelated-histories

如果它打开nano编辑器,您只需按Ctrl+X保存并关闭即可。

现在在本地推送更改

 git push

2.含义

错误:

当两个不相关的项目(即,不知道彼此存在且提交历史不匹配的项目)合并时,会出现“致命:拒绝合并不相关的历史”Git错误。

getmerge命令(来自GitHub文档):--允许不相关的历史记录:--允许不相关的历史记录

默认情况下,gitmerge命令拒绝合并不共享共同祖先的历史记录。当合并两个独立启动的项目的历史记录时,可以使用此选项覆盖此安全性。由于这是非常罕见的情况,因此默认情况下没有启用此功能的配置变量,也不会添加。


工具书类

推荐:“致命:拒绝合并不相关的历史”Git错误Git 2.9发行说明


有关堆栈溢出的更多信息

推荐使用--允许不相关的历史记录的一个很好的解释和警告:在拉到恢复的存储库时“拒绝合并不相关的记录”失败如果--允许不相关的历史记录不起作用:添加Git远程后“致命:拒绝合并不相关历史记录”Git拒绝合并不相关的历史。什么是“无关历史”?该用户使用GitHub桌面:如何解决在将项目上传到GitHub时“拒绝合并不相关的历史记录”的问题?Git失败,出现致命错误,拒绝将无关历史与Git推送合并

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

因此,您在执行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.

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

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

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

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

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

这通常发生在您第一次提交到远程存储库时。正如错误明确指出的“拒绝合并不相关的历史”,我们需要使用--allow不相关历史标志。

git pull origin master  --allow-unrelated-histories

现在会有一些冲突,我们必须手动解决。之后,只需提交代码并推送它。

我也有同样的问题。问题很遥远,有一些东西阻止了这一点。

我首先创建了一个本地存储库。我将LICENSE和README.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