我有一个项目的 4 个版本。版本 1-3 是最初不受源代码控制的“原型”(它们作为文件系统中的单独目录存在)。版本 4 从一开始就受到源代码控制,现在有很长的提交历史。
我想将这些组合起来,使版本 1-3 成为单独的变更集,其中每个变更集都是前一个的后代。版本 4 的根应该成为版本 3 的后代(当然,版本 4 的历史也不会崩溃)。
所有更改都是私有的,而不是公开的(重写历史没有问题,因为它是)。
到目前为止我所做的并尝试了什么:
1. 我在原型版本的目录中设置了新的 hg 存储库
2. 我克隆了版本 4 的存储库
3. 我将hg pull --force
版本 1-3 的无关存储库拉到了克隆的存储库。
这在单个存储库中为我提供了 4 个不相关的“根”(没有祖先的变更集)。当我将它们结合起来时,我不想记住这 4 个词根。 hg rebase
应该让我移动变更集并销毁原件,不像hg merge
.
在这里,我将101
用作“版本 1”(这是一个没有父级的单个变更集)102
的修订版和“版本 2”的修订版。
尝试1:我尝试hg rebase -b 102 -d 101
但得到响应nothing to rebase
。大概这是因为他们没有共同的祖先(我觉得这不一致......-b 102
将包括除共同祖先之外的所有祖先,在这种情况下什么都不是。)
尝试2:我尝试hg rebase -s 102 -d 101
。这会导致合并冲突。我这样做hg revert --all --rev 102
并hg resolve -m
表明我在所有冲突中都更喜欢“版本 2”(尽管我想知道在存在添加/删除的情况下这是否真的是更喜欢一个父级而不是另一个父级的正确方法?)。但是当我提交时,我没有线性历史——修订102
仍然存在!