首页 文章

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

提问于
浏览
1235

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

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

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

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

9 回答

  • 37

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

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

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

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

  • 1637

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

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

    git pull origin branchname --allow-unrelated-histories

  • 24

    请尝试以下命令

    git pull origin master --allow-unrelated-histories

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

  • 36

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

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

    git pull origin master --allow-unrelated-histories 
    
    git push origin master
    
  • 8

    试试 git pull --rebase development

  • 2

    由于所有其他答案实际上都没有回答这个问题,因此这是一个在相关问题上受到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.
    
  • 186

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

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

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

    为此,请输入以下命令: -

    git pull origin branchname --allow-unrelated-histories
    

    例如: - git pull origin master --allow-unrelated-histories

    参考: - Github unrelated histories issue

相关问题