14

我需要将两个类的功能合二为一,但我想知道我是否也可以将它们的更改历史结合起来?

这两个类都包含许多以前的更改,因此我想将它们的更改历史记录在一个地方以供参考。我可以在组合类中发表评论,但在 IDE 中,获取已删除文件的历史记录并不容易。

4

1 回答 1

21

为此,您需要将文件合并记录为合并变更集。

假设变更集 0 是您当前的头,其中包含要合并到文件 C 中的文件 A 和 B。为此,请将文件 A 重命名为 C 并提交为变更集 1,然后更新回变更集 0,将文件 B 重命名为 C 和将此作为变更集 2 提交。接下来,合并这两个变更集,合并它们的内容并删除剩余的文件 A 和 B。这会导致 C 的文件历史记录为从 A 和 B 降序注册。最后,您可以重命名文件 C回到A。

生成的树如下所示:

0 [A, B] --- 1 [A, C] \
          \            \
           \ 2 [C, B] --- 3 [C] --- 4 [A] 

示例命令行流程:

$ hg init
$ echo a > a
$ echo b > b
$ hg add a b
$ hg commit -m "add files a and b"
$ hg mv a c
$ hg commit -m "rename a to c"
$ hg update 0
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg mv b c
$ hg commit -m "rename b to c"
created new head
$ hg merge
merging c
warning: conflicts during merge.
merging c incomplete! (edit conflicts, then use 'hg resolve --mark')
0 files updated, 0 files merged, 1 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
$ ls
c      c.orig
$ cat c
<<<<<<< local
b
=======
a
>>>>>>> other
$ echo ab > c
$ hg resolve --mark c
$ hg commit -m "merge a and b into c"
$ hg mv c a
$ hg commit -m "rename c back to a"

如果您现在键入hg log -f a,您会注意到显示了两个文件的历史记录。

于 2012-05-23T11:49:06.357 回答