在git重新启动/开发过程中,git显示以下错误消息:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
我的Git版本是2.9.0。它在以前的版本中运行良好。
我如何才能继续使用新版本中引入的强制标志来允许不相关的历史?
在git重新启动/开发过程中,git显示以下错误消息:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
我的Git版本是2.9.0。它在以前的版本中运行良好。
我如何才能继续使用新版本中引入的强制标志来允许不相关的历史?
当前回答
如果您有存储库的浅Git克隆,也会发生这种情况。
我最近在CI/CD设置中遇到了这个问题,以前的解决方案都不适合我。我正在构建一个CI/CD管道,以分析MR源分支的MR创建代码。为此,我需要在main分支上运行一次分析,然后在与main合并的MR源分支上运行分析,在尝试通过gitmerge命令合并分支时出现了这个错误。
CI/CD设置中出现这种情况的原因:通常在CI/CD环境中,Git存储库是一个用来加快速度的浅层克隆,它不包括完整的提交历史,因此,在合并Git时,我们可能会认为我们正在尝试合并不相关的分支,这实际上是不正确的。
解决方案:
使用以下命令将浅存储库转换为非浅存储库:
git fetch --unshallow
其他回答
由于所有其他答案实际上都没有回答这个问题,所以这里有一个由这个相关问题的答案启发的解决方案。
因此,您在执行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 pull——允许不相关的历史记录,但它没有奏效,但这为我解决了问题:
我将桌面存储库中的所有文件复制到另一个文件夹,然后删除该文件夹。然后我再次克隆存储库,因为它是一个新项目。当我再次复制我的文件并将其推送时,它就像魅力一样发挥作用。
首先,使用以下命令将远程更改拉到本地:
git pull origin branchname --allow-unrelated-histories
**在我的情况下,branchname是master。
当执行pull命令时,会发生冲突。你应该解决冲突。我使用Android Studio解决冲突。
当冲突解决后,合并就完成了!
现在你可以安全地推了。
我遇到了同样的问题:
这是我所做的:
git pull origin main --allow-unrelated-histories
我使用Visual Studio代码解决了合并冲突,然后我做到了:
git commit -m "commit message"
git push origin main
我也犯了同样的错误,这个命令对我有效:
git pull gitlab master --allow-unrelated-histories
请注意,在您的案例中,gitlab可能是origin或heroku。