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

Shu*_*ary 1862 git rebase

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

fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Run Code Online (Sandbox Code Playgroud)

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

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

blu*_*112 2332

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

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

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

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

  • 知道合并更改但此选项不适用于rebase (15认同)
  • 非常好,也适用于`git pull`.是在那个"罕见的事件,融合了独立开始他们生活的两个项目的历史".`git --work-tree ="." pull --allow-unrelated-histories` (12认同)
  • 是否有任何选项可以永久打开`--allow-unrelated-histories`? (3认同)
  • @jmarceli"因为这样的"两个项目合并"是一个罕见的事件,所以不会添加总是允许这种合并的配置选项." 所以不行. (3认同)
  • 这个问题有 2000+ 点赞。我不称其为“罕见事件”。 (3认同)
  • 我尝试以这种方式合并一个分支以用于不同的repo,但它在我当前的分支上创建了一个新的提交,并且没有保留其他repo的历史记录.然后我从另一个repo检出了一个本地分支,然后才合并它,突然出现了正常的合并提交.奇怪的. (2认同)
  • 我试图将最新的上游/主控拉到我的本地主控,但由于上述错误而失败。一旦我使用了“--allow-unrelated-histories”,它就会导致合并冲突。因此,在这种情况下,我真正需要的是*不是*`git pull --allow-unrelated-histories upper master`,而是一个**硬重置**(危险,你会覆盖本地文件)来使我的本地主控再次完全跟踪上游主控:`git reset --hard upload/master` 非常完美。来源:/sf/ask/78817791/#8888015 (2认同)

adi*_*adi 1037

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

使用--allow-unrelated-historiesflag以这种方式处理pull请求:

fatal: refusing to merge unrelated histories

  • 如果我使用README.md创建一个新的Github存储库,那么我总是会看到这个错误,然后在第一次将它拉到本地存储库.很烦人. (198认同)
  • 对于新的回购,首先拉动,通常最好从一个`git clone`开始. (22认同)
  • @PardeepJain请参阅此https://github.com/git/git/blob/master/Documentation/RelNotes/2.9.0.txt#L58-L68 (3认同)
  • 这让我停了好几个小时,然后才意识到必须有一个明显的解决方案来合并这样的文件(如果它出现在默认文件中)-我很高兴我不是唯一遇到此问题的人! (2认同)
  • 就我而言,这是因为我在github上添加了许可证文件。上面提到的命令(下面是相同的)起作用了。 (2认同)
  • 作品魅力十足 (2认同)

Ogb*_*lis 552

请尝试以下命令

__CODE__

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

  • 这比第一个答案更好吗?/sf/answers/2655662551/ 应该是对其进行评论或编辑,以避免冗余和错误信息。 (8认同)
  • 因为它解决了 `tl:dr` (8认同)

小智 220

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

git remote add origin <repository url>
Run Code Online (Sandbox Code Playgroud)

当我试图推/拉时,我得到了同样的fatal: unrelated_histories错误.以下是我修复它的方法:

git pull origin master --allow-unrelated-histories
git merge origin origin/master
... add and commit here...
git push origin master
Run Code Online (Sandbox Code Playgroud)

  • 如何在 Mac 上按下插入按钮?实际上,我必须输入提交消息并从命令行进行合并,但我不知道如何从命令行进行合并。 (2认同)
  • 这是一个非常好的答案。关键是你必须强制拉取然后合并本地和远程存储库。 (2认同)

VIK*_*HLI 146

为此,请输入命令:

git pull origin branchname --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

例如:

git pull origin master --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

参考:

Github无关的历史问题


小智 127

我运行了这个命令,问题得到了解决。

git pull origin branchName --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

查看此页面了解更多信息。

  • `git merge origin/main localBranchName --allow-unrelated-histories` 对我有用。 (9认同)

MJ *_*tes 102

git pull origin <branch> --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

您将被带到Vim编辑窗口:

  • 插入提交消息
  • 然后按Esc(退出“插入”模式),然后按:(冒号),再按x(小“ x”),最后Enter按退出Vim
  • git push --set-upstream origin <branch>

  • Ctrl + X不会让您脱离Vim (4认同)

Aam*_*imi 99

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

git pull origin master --allow-unrelated-histories 

git push origin master
Run Code Online (Sandbox Code Playgroud)


Fed*_*Baù 74

1.解决问题

执行?时出现此错误git pull origin master

fatal: refusing to merge unrelated histories
Run Code Online (Sandbox Code Playgroud)

根据场景运行以下命令之一(以前是主命令,现在是主命令)

 git pull origin master --allow-unrelated-histories

 git pull origin main --allow-unrelated-histories
 
Run Code Online (Sandbox Code Playgroud)

2. 意义

  • 错误

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

默认情况下, git merge 命令拒绝合并不共享共同祖先的历史。当合并两个独立开始的项目的历史时,此选项可用于覆盖此安全性。由于这是一种非常罕见的情况,默认情况下不存在启用此功能的配置变量,也不会添加。

在此处输入图片说明


参考


更多关于 StackOverflow 的信息


Ami*_*emi 55

对于 Android Studio 和 IntelliJ:

首先,提交所有内容并解决任何冲突。

然后从IDE下面打开终端并输入:

git pull origin master --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

现在你可以推了。

  • 它是一个 git 命令,与 Android studio 或 Inteliji 无关 (4认同)

Dan*_*rov 45

尝试 git pull --rebase development

  • @RiccardoMurri刚刚尝试过,我不会再这样做了。我的新存储库中包含一些示例初始化文件,而我的本地存储库数月值得提交。运行此命令(使用“ newOrigin分支”而不是“ development”)将初始提交添加到本地分支的顶部,从而有效地删除了其中的几乎所有内容。我希望新遥控器的初始提交位于底部。 (3认同)
  • 这应该是:`git pull --rebase=preserve --allow-unrelated-history development` (2认同)

Ani*_*til 33

警告这可能会覆盖远程存储库

这为我工作:

git push origin master --force
Run Code Online (Sandbox Code Playgroud)

  • 不要这样!这会[覆盖所有远程文件](https://git-scm.com/docs/git-push#Documentation/git-push.txt---force)。 (3认同)
  • 但本地和远程文件实际上会发生什么? (2认同)

cda*_*uth 32

由于所有其他答案实际上都没有回答问题,因此这个答案的灵感来自相关问题的答案.

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

$ git rebase origin/development
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Run Code Online (Sandbox Code Playgroud)

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

$ git status
interactive rebase in progress; onto 4321beefdead
Last command done (1 command done):
   pick 1234deadbeef1234deadbeef test merge commit
Run Code Online (Sandbox Code Playgroud)

所以你现在可以手动完成合并.找出原始合并提交的父提交:

$ git log -1 1234deadbeef1234deadbeef
commit 1234deadbeef1234deadbeef
Merge: 111111111 222222222
Author: Hans Dampf
Date:   Wed Jun 6 18:04:35 2018 +0200

    test merge commit
Run Code Online (Sandbox Code Playgroud)

找出两个合并父项中的哪一个是合并到当前的那个(可能是第二个,验证git rebase),然后手动执行合并,复制原始合并提交的提交消息:

$ 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.
Run Code Online (Sandbox Code Playgroud)


oiy*_*yio 29

首先使用以下命令将远程更改拉到本地:

git pull origin branchname --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

** 在我的情况下,分支名称是主。

当 pull 命令完成时,就会发生冲突。你应该解决冲突。我使用 Android Studio 来解决冲突。 在此处输入图片说明

当冲突解决后,合并就完成了!

现在您可以安全地推动。


小智 27

我有同样的问题。问题很遥远,有些东西阻止了这种情况。

我首先创建了一个本地存储库。我在本地添加了一个LICENSEand README.md文件并提交。

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

所以现在当我跑步

git push --set-upstream origin master
Run Code Online (Sandbox Code Playgroud)

我有:

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.
Run Code Online (Sandbox Code Playgroud)

现在克服这个我做了

git pull origin master
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

From https://github.com/lokeshub/myTODs
branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories**
Run Code Online (Sandbox Code Playgroud)

我试过了:

git pull origin master --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

结果:

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.
Run Code Online (Sandbox Code Playgroud)

解:

我删除了远程存储库并创建了一个新文件(我认为只有删除文件README才行),然后下面的文件就可以了:

git remote rm origin
git remote add origin https://github.com/lokeshub/myTODOs.git
git push --set-upstream origin master
Run Code Online (Sandbox Code Playgroud)

  • 创建新的存储库不是解决方案 (22认同)
  • git pull origin master --allow-unrelated-histories为我工作..谢谢 (3认同)
  • 这不是解决方案。如果您是初学者,则可以这样做,但是如果您正在处理一些实际项目,则应该处理正确的方法。 (2认同)

San*_*dam 23

当您第一次提交到远程存储库时,通常会发生这种情况。由于错误明确指出“拒绝合并无关的历史记录”,因此我们需要使用--allow-unrelated-histories标志。

git pull origin master  --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

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

  • 正如问题中提到的,我正在尝试执行 git-rebase 而不是 git-pull,git-rebase 没有 `--allow-unrelated-histories` 标志。 (2认同)

小智 17

我试过git pull --allow-unrelated-histories没有用,但对我来说解决这个问题的是:

  1. 我将桌面存储库中的所有文件复制到另一个文件夹,然后删除了该文件夹。

  2. 然后我再次克隆 repo,因为它是一个新项目。

  3. 当我再次复制我的文件并推送它时,它就像魅力一样。


str*_*r77 16

在执行 a 时git pull,我收到了一条fatal: refusing to merge unrelated histories 关于我有一段时间没有更新本地副本的 repo 模块的消息。

我运行这个命令只是为了从原点刷新本地。我只想要远程的最新版本,不需要任何本地更改。

git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

这在我的情况下修复了它。

  • 警告:这删除了我的所有文件。如果您不知道自己在做什么,请小心! (22认同)
  • 这将删除所有待处理的更改! (2认同)
  • 如果您想要删除源上的内容并且不需要保留任何更改,那么这非常有用。 (2认同)

el_*_*gro 13

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

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

git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue
Run Code Online (Sandbox Code Playgroud)

  • @AgentZebra 对于复平面中的任何圆盘,连续闭合路径积分为 0。 (6认同)
  • 请用飞机英语吗? (2认同)

Pea*_*ace 9

我遇到了同样的问题:

这就是我所做的:

git pull origin main --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

我使用 Visual Studio Code 来解决合并冲突,然后我这样做了:

git commit -m "commit message"

git push origin main
Run Code Online (Sandbox Code Playgroud)


dz9*_*902 7

对于 Google 员工:

如果您在 GitHub 上创建了一个新的存储库,并且不小心使用README.gitignore文件对其进行了初始化。

如果您发现自己无法合并或变基,因为.git文件夹已损坏。

然后:

  • 新建一个文件夹
  • git clone
  • 将所有文件粘贴到此文件夹中

现在本地和远程将有“相关历史”,并且会愉快地合并或变基。


Wen*_* Du 7

blue112的答案并没有解决这个问题,这是在变基的背景下。

\n

同步两个分歧分支的唯一方法是将它们合并在一起,从而产生额外的合并提交和两组包含相同更改的提交(原始提交和来自重新基准分支的提交)。不用说,这是一个非常令人困惑的情况。

\n

所以,在你运行之前git rebase,总是问自己,\xe2\x80\x9c还有其他人在看这个分支吗?\xe2\x80\x9d如果答案是肯定的,就把你的手从键盘上拿开,开始考虑一种非破坏性的方法进行更改(例如命令git revert)。否则,你\xe2\x80\x99可以安全地重写历史记录。

\n

参考:变基黄金法则

\n


Bha*_*iya 7

通过切换allow-unrelated-histories开关来解决错误。在 git pull 或 git merge 命令之后,添加以下标签:

git pull origin master --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)

之后你可能会遇到冲突。所以解决了冲突并提交。这对我有用。


Ame*_*icA 6

对于我的情况,我想将不相关的历史分支合并到我的当前分支:

git merge <-unrelated-history-branch-name> --allow-unrelated-histories
Run Code Online (Sandbox Code Playgroud)


小智 5

如果有人在执行 rebase 分支时遇到同样的问题,--allow-unrelated-histories也请使用这个git pull origin <branch-name> --allow-unrelated-histories --no-ff希望它可以帮助某人


归档时间:

查看次数:

1227495 次

最近记录:

6 年,2 月 前