在 git rebase origin/development
期间,Git 显示以下错误消息:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
我的 Git 版本是 2.9.0。它曾经在以前的版本中工作正常。
如何使用新版本中引入的强制标志继续此变基以允许不相关的历史记录?
git-rebase
的情况,而答案给出了 git-merge
的标志
git pull [repo URL]
而不是 git clone [repo URL]
后得到了这个错误
您可以使用 --allow-unrelated-histories
强制合并发生。
这背后的原因是自 Git 2.9 以来默认行为发生了变化:
“git merge”用于允许合并两个默认情况下没有共同基础的分支,这导致创建现有项目的全新历史,然后被毫无戒心的维护者拉取,这允许将不必要的并行历史合并到现有项目中.该命令已被教导默认情况下不允许这样做,并在罕见事件中使用逃生舱口 --allow-unrelated-histories 选项,该事件合并了两个独立开始其生活的项目的历史。
有关详细信息,请参阅 Git release changelog。
在我的情况下,每次尝试的错误只是 fatal: refusing to merge unrelated histories
,尤其是远程添加 Git 存储库后的第一个拉取请求。
使用 --allow-unrelated-histories
标志以这种方式处理拉取请求:
git pull origin branchname --allow-unrelated-histories
根据 2.9.0 release notes - git pull
已被教导将 --allow-unrelated-histories
选项传递给底层 git merge
git clone
开头。
尝试以下命令:
git pull origin master --allow-unrelated-histories
这应该可以解决您的问题。
tl:dr
当我首先设置本地存储库时出现此错误。然后我去了 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
.git
文件夹,运行 git init
并按照 Adithya 所说的操作,但合并部分除外。
为此,输入命令:
git pull origin branchname --allow-unrelated-histories
例如,
git pull origin master --allow-unrelated-histories
参考:
GitHub unrelated histories issue
git pull origin <branch> --allow-unrelated-histories
你将被引导到一个 Vim 编辑窗口:
插入提交消息
然后按 Esc(退出“插入”模式),然后按 :(冒号),然后按 x(小“x”),最后按 Enter 退出 Vim
git push --set-upstream origin <分支>
:x<Enter>
会
我运行了这个命令,问题得到了解决。
git pull origin branchName --allow-unrelated-histories
查看此 page 了解更多信息。
git merge origin/main localBranchName --allow-unrelated-histories
为我工作。
1.解决问题
执行 git pull origin master
时出现错误:
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 错误发生在两个不相关的项目合并时(即,不知道彼此存在且提交历史不匹配的项目)。
命令 GIT HUB DOCS --allow-unrelated-histories: --allow-unrelated-histories
默认情况下, git merge 命令拒绝合并不具有共同祖先的历史。当合并两个独立开始的项目的历史时,此选项可用于覆盖此安全性。由于这是一种非常罕见的情况,因此默认情况下不存在启用此功能的配置变量,也不会添加。
https://i.stack.imgur.com/7cpDZ.png
参考
推荐:“致命:拒绝合并不相关的历史”Git 错误
Git 2.9 发行说明
更多关于堆栈溢出
推荐使用--allow-unrelated-histories的很好的解释和警告:拒绝合并不相关的历史”失败,同时拉到恢复的存储库
如果 --allow-unrelated-histories 不起作用:致命:添加 git remote 后拒绝合并不相关的历史
Git 拒绝合并不相关的历史。什么是“无关历史”?
该用户使用 Github Desktop:如何解决上传项目到 github 时“拒绝合并无关历史”的问题?
Git 因致命错误而失败。拒绝将不相关的历史与 git push 合并?
我有同样的问题。尝试这个:
git pull origin master --allow-unrelated-histories
git push origin master
对于 Android Studio 和 IntelliJ:
首先,提交所有内容并解决任何冲突。
然后从IDE下方打开终端并输入:
git pull origin master --allow-unrelated-histories
现在可以推了。
试试git pull --rebase development
git pull --rebase=preserve --allow-unrelated-histories development
newOrigin branch
而不是 development
)将初始提交添加到本地分支的顶部,从而有效地从中删除了几乎所有内容。我希望新遥控器的初始提交位于底部。
由于所有其他答案实际上并未回答该问题,因此这里有一个受 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.
警告这可能会覆盖远程存储库
这对我有用:
git push origin master --force
首先使用以下命令将远程更改拉到本地:
git pull origin branchname --allow-unrelated-histories
** 就我而言,分支名称是 master。
https://i.stack.imgur.com/1TYEo.jpg
冲突解决后,合并完成!
现在你可以安全地推动了。
Resolve Conflict
按钮。有时右下弹出/气球消失 &我什么都做不了。谢谢@oiyio
我有同样的问题。问题是远程有一些东西阻止了这一点。
我首先创建了一个本地存储库。我将 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
git push --force ...
将是第 1 步的正确解决方案
这通常发生在您第一次提交到远程存储库时。由于错误清楚地表明“拒绝合并不相关的历史”,我们需要使用 --allow-unrelated-histories 标志。
git pull origin master --allow-unrelated-histories
现在会有一些我们必须手动解决的冲突。之后只需提交代码并推送它。
--allow-unrelated-histories
标志。
执行 git pull
时,我收到此消息 fatal: refusing to merge unrelated histories
,因为我有一段时间没有更新本地副本。
我运行这个命令只是为了从原点刷新本地。我只想从远程获取最新信息,不需要任何本地更改。
git reset --hard origin/master
这在我的情况下解决了它。
我试过 git pull --allow-unrelated-histories
没有用,但为我解决这个问题的是:
我将桌面存储库中的所有文件复制到另一个文件夹,然后删除了该文件夹。然后我再次克隆 repo,因为它是一个新项目。当我再次复制我的文件并推送它时,它就像魅力一样。
我也为此苦苦挣扎,但我设法找到了解决方法。
当您遇到上述错误时,只需选择合并提交,然后继续 rebase:
git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue
对于 Google 员工:
如果您在 GitHub 上创建了一个新存储库并意外使用 README
或 .gitignore
文件对其进行了初始化。
如果您发现自己无法合并或变基,因为 .git
文件夹已损坏。
然后:
新建一个文件夹
git 克隆
将所有文件粘贴到此文件夹中
现在本地和远程将有“相关历史”,并将愉快地合并或变基。
我遇到了同样的问题:这就是我所做的:
git pull origin main --allow-unrelated-histories
我使用 VsCode 来解决合并冲突,然后我做了:
git commit -m "提交信息"
git push origin 主要
对于我的情况,我想将不相关的历史分支合并到我的当前:
git merge <-unrelated-history-branch-name> --allow-unrelated-histories
通过切换 allow-unrelated-histories
开关可以解决该错误。在 git pull 或 git merge 命令之后,添加以下标签:
git pull origin master --allow-unrelated-histories
之后可能会发生冲突。所以解决了冲突并提交它。这对我有用。
投票最多的答案并没有解决这个问题,这是在变基的背景下。
同步两个分叉分支的唯一方法是将它们重新合并在一起,从而产生一个额外的合并提交和两组包含相同更改的提交(原始的提交,以及来自您的重新定位分支的提交)。不用说,这是一个非常混乱的情况。
因此,在运行 git rebase
之前,请始终问自己:“还有其他人在看这个分支吗?”如果答案是肯定的,请将您的手从键盘上移开,开始考虑一种非破坏性的方式来进行更改(例如,git revert
命令)。否则,您可以随意重写历史记录。
参考:https://www.atlassian.com/git/tutorials/merging-vs-rebasing#the-golden-rule-of-rebasing
我使用 rebase 多年,从未遇到过这样的问题。但是,您的第一个问题是,您尝试直接在远程存储库(称为 origin
)的远程分支 development
上执行此操作。这实际上是错误的,因为 rebase 是一个危险的命令,它会重构 git 历史。话虽如此,您应该首先尝试本地存储库并仅推送它,如果它按预期对您有用。
所以,我通常的 rebase 工作流程如下所示(但请记住,你不应该在分支上使用 rebase,你不是唯一的一个委员会。对于这样的分支,如果适用,只需使用合并和解决冲突):
确保你有一个干净的工作树(没有取消提交的更改)结帐到你想要变基的分支(例如,假设它是主分支;作为单行命令): git checkout master && git pull origin master && git checkout development 做实际的变基: git rebase master 如果它完成并且一切都按预期工作,将它推送到你的遥控器。为此,您需要强制它,因为远程主机已经具有另一个顺序的历史记录,远程将回答没有推送。因此,我们需要说“我的本地历史版本是正确的,使用我的本地历史版本覆盖该远程分支上的所有内容”: git push -f origin development
正如我已经提到的,请记住,rebase 会操纵 git 历史记录,这通常是一件坏事。但是,可以在没有其他人承诺的分支上执行此操作。为了保持分支对其他开发人员的可拉性,请使用另一种合并策略,例如合并本身、squash 或cherrypick。所以,换句话说:Rebase 不应该是你的分布式开发工具。如果您是唯一在此存储库上工作的人,它对您来说很好。
我们使用特征分支策略。在这种情况下,我通常使用 rebase 来从其他开发人员那里获取“更新”,这同时发生在 master 分支上。这样做,它会减少在拉取请求中可见的提交的大小。因此,它使代码审查者更容易看到我在此功能分支中所做的更改。
在管理员在服务器端强制推送到具有数百次提交的开发分支后,我遇到了这个错误。
好吧,我只是想要的不是拉(提取+合并),而是将我的本地主机与远程源主机对齐。移动到一个单独的文件夹并执行 git clone 是一种方法,但我相信只是进行硬重置是更优雅的解决方案。
因此,在这种特殊情况下,我对这个错误的回答不是以上任何一种。我只是想要这个:
git reset --hard origin/master
因为你既不能推,也不能拉和推,也不能合并拉和推:-
您可以在 GitHub 存储库上创建一个新分支。然后: - git add 。 git commit -m 'commitName' 并在终端的当前目录中引用该分支。 git branch -m master branchName git push -f origin branchName 你的代码将被推送到一个新的分支。然后你可以合并这两个分支。
这对我有用。
fatal: refusing to merge unrelated histories
也可能是由浅克隆引起的,因为移植提交没有深入到看到公共基础
我有同样的错误,这个命令对我有用
git pull gitlab master --allow-unrelated-histories
请注意,在您的情况下,gitlab 可能是 origin 或 heroku。
如果您有存储库的 shallow
git clone,也会发生这种情况。
我最近在我的 CI/CD 设置中遇到了这个问题,以上解决方案都不适合我。我正在构建 CI/CD 管道来分析针对 MR 源分支创建 MR 的代码,为此,我需要在主分支上运行一次分析,然后在与主分支合并的 MR 源分支上运行,尝试合并时出现此错误通过 git merge
命令进行分支。
在 CI/CD 设置中发生这种情况的原因:通常在 CI/CD 环境中,git 存储库是用于加快速度的 shallow clone,它不包括提交的完整历史记录,因此当合并 git 可能会认为我们正在尝试合并不相关的分支,这实际上是不正确的。
解决方案:使用以下命令将浅层存储库转换为非浅层存储库:
git fetch --unshallow
不定期副业成功案例分享
--allow-unrelated-histories
?git pull
。在那次“罕见的事件中,合并了两个独立开始生活的项目的历史”。git --work-tree="." pull --allow-unrelated-histories