【问题标题】:How to merge branches with entirely different commit histories in Github?如何在 Github 中合并具有完全不同提交历史的分支?
【发布时间】:2021-05-08 23:02:00
【问题描述】:

我想试试 Github,所以我创建了一个帐户。为了训练自己,我创建了一个远程存储库,克隆到我计算机上的一个文件夹中,并试验了如何将我修改的文件推送到远程存储库。为此,一切都很好。

现在麻烦来了:为了进一步试验,我创建了另一个远程存储库,我想从本地存储库推送一些代码。推送操作似乎很好,如下图所示

如您所见,我的远程存储库中的分支称为“main”,而我的本地存储库中的分支称为“master”。问题是当我尝试使远程存储库中的更改生效时(即,当我尝试通过单击“比较和拉取请求”按钮将“主”合并到“主”时,如果我表达正确的话?),Github 告诉我那个

没有什么可以比较的。 main 和 master 完全是 不同的提交历史。

因此我无法将更改放到网上。有人可以解释一下如何解决这个问题吗?

注意:我使用 Git Bash 有一个命令行来执行操作

【问题讨论】:

    标签: github git-bash


    【解决方案1】:

    选中下拉菜单以切换远程存储库中的分支,位于代码列表上方的左侧。您应该能够在两者之间切换,并看到所有内容都已推送到 master 中。也就是说,我发现你的问题与我的相似......我有同样的错误“...... main 和 master 是完全不同的提交历史” - 并且刚开始正确地做 GitHub - 正在尝试(或认为我应该)将它们拉或合并在一起。我确实读过“主要”应该替换“大师”的地方,所以我最终都选择了这很令人困惑。旧的 repos 将继续使用 master,直到 GitHub 宣布为它们进行“无缝”转换。我怀疑在创建本地 repo 时,我使用了 main 使用之前的旧指令,这可能已经添加了 master 分支。

    【讨论】:

      【解决方案2】:

      环顾四周,我已经设法自己解决了这个问题,现在只有主分支,master 已安全删除。我把我的步骤放在下面 - 请阅读引用的链接,首先备份您的文件,并自行承担风险!我只能说它对我有用。其他更有经验使用 Git Bash 的人可能会就如何增强甚至删除某些步骤提供建议。

      注意:我的回购只有大约一周的时间......所以我的风险承受能力相当高!

      如果您想尝试此操作,请备份您的存储库。

      受到meagar's response 的启发,提出了一个关于此问题的问题,如果没有advice on GitHub replacing master with main here. 的修改/指导,该解决方案无法直接对我起作用

      步骤如下:

      1. 我备份了我的本地仓库!!做这个! :)
      2. git branch 只显示主人;所以我检查并切换到主git checkout main
      3. 我与git branch 核对了一下,现在两个分支都已列出
      4. 我通过 git status 看到“您的分支已通过 'origin/main' 更新”
      5. ls 确认我在 main 中,只有 README 文件,而 master 有 更多文件
      6. git fetch 在主分支上
      7. 然后我执行了微不足道的步骤:
      8. 我检查了主控,并'用git checkout master 切换到分支 'master', "你的分支是最新的'origin/master'"
      9. 然后git rebase origin/main 更新了master的标头
      10. 我添加了一个git status 用于现实检查,Bash 响应:“在分支主控上。您的 branch 和 origin/master 有分歧......还有一些细节......(使用 “git pull”将远程分支合并到你的分支)没什么 提交....
      11. 我按照建议执行了git pull 并得到“致命:拒绝 合并不相关的历史。
      12. 所以我又git fetch 然后git branch 确认主要和主人都在那里,是的,他们在
      13. 然后按照链接到此建议的第二个参考添加一个标志:git pull origin master --allow-unrelated-histories
      14. 然后git commit -m "merging main and master"
      15. 然后我去远程repo在线确认/设置main为默认分支
      16. 我做了git push 然后做了一个在线回购拉取请求, 确认哪个报告“删除母版是安全的”
      17. 终于回到 bash,git push origin --delete master 检查远程 回购,一切都在那里。

      没有细节的简明步骤:

      git branch
      git checkout main
      git branch
      git status
      ls
      git fetch
      git checkout master
      git rebase origin/main
      git status
      git pull (fatal: refusing to merge unrelated histories)
      git fetch
      git branch
      git pull origin master --allow-unrelated-histories
      git commit -m "merging main and master"
      [CHECK REMOTE REPO THAT MAIN IS DEFAULT BRANCH]
      git push
      [PULL REQUEST TO MERGE ON REMOTE REPO - MESSAGE "... safe to delete master"]
      git push origin --delete master
      

      【讨论】:

        猜你喜欢
        • 2014-06-30
        • 1970-01-01
        • 2015-04-17
        • 2021-07-20
        • 2011-11-08
        • 1970-01-01
        • 2013-03-24
        • 2013-12-18
        • 1970-01-01
        相关资源
        最近更新 更多