git - 从 Mercurial 迁移到 Git 并与自定义更改 merge

标签 git merge mercurial nopcommerce

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

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

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

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

您知道如何解决这个问题吗?

最佳答案

您可能猜对了问题的根源。 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**

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

关于git - 从 Mercurial 迁移到 Git 并与自定义更改 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27413733/

相关文章:

javascript - 有没有办法在单个 <script> 标签中提供多个 JS 脚本?

git rebase 交互式 : squash merge commits together

Mercurial - 变更集中更改的所有文件?

mercurial - 在命令行执行 Mercurial 提交时如何退出 Vim?

git - 加入同一存储库旧版本的历史记录

Eclipse 快捷方式,用于与 Head Revision 比较

Github认为 merge 后分支不同

git - 有没有办法让 git status 显示 2 个 Remote

python - Pandas:根据列数据合并或连接数据框?

Mercurial:无需克隆即可获取有关存储库的信息