【问题标题】:Moving from Mercurial to Git and merging with custom changes从 Mercurial 迁移到 Git 并与自定义更改合并
【发布时间】:2014-12-11 01:06:20
【问题描述】:

我在从 Mercurial 迁移到 Git 并将最新版本的 nopCommerce 与我的更改合并时遇到问题。

这就是我所做的。我很久以前克隆了 nopCommerce mercurial 存储库(我认为是 2.60 版)。从那以后,我对平台进行了许多更改,并将它们与更新版本的 nopCommerce 合并。我最后一次合并是在 3.10 版上。

现在我看到 nopCommerce 开始使用 Git,所以我将我的 mercurial 存储库转换为 Git(按照本指南:http://arr.gr/blog/2011/10/bitbucket-converting-hg-repositories-to-git/)。但是现在,当我拉动 nopCommerce 更改(最高版本 3.50)时,我得到以下信息:“警告:没有常见的提交”,并且所有提交都被下载(不仅仅是新的,从 3.10 到 3.50),虽然我我的存储库中已经有最高版本 3.10 的提交。基本上,最高版本 3.10 的 nopCommerce 提交是重复的。我认为会发生这种情况,因为它们有不同的提交编号(当我将我的 mercurial 存储库转换为 Git 时,提交得到不同的提交编号,我看到新的 nopCommerce Git 存储库也具有与旧的 Mercurial 存储库不同的提交编号)。

问题是,当我将 nopCommerce v3.50 与我所做的更改合并并尝试解决冲突时,BASE 文件为空,因为 Git 看不到它们有共同的祖先。 LOCAL 文件将我的存储库中的提交作为祖先,REMOTE 文件将新 Git 存储库中的提交作为祖先。

您知道如何解决此问题吗?

【问题讨论】:

    标签: git merge mercurial nopcommerce


    【解决方案1】:

    您可能猜对了问题的根源。 Git 看到两个完全不同的历史,不知道如何处理它们。你可以使用git replace来解决这个问题:

    • 在您的历史记录和他们的历史记录之间找到最新的共同祖先(= 在两个历史记录中都有副本的最新提交)。请注意这些提交的 shas。
    • 运行git replace **sha-in-your-history** **sha-in-theirs**

    看看新的git log,看看结果是否符合您的喜好。如果是,您可以通过运行使更改永久化:

    git filter-branch --tag-name-filter cat -- --all
    git replace -d **sha-in-your-history**
    

    之后,您可能想要克隆 repo 并删除以前的副本以实际从磁盘中删除“您的”历史副本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多