我可以在Mercurial中合并两个文件的历史记录吗?

我可以在Mercurial中合并两个文件的历史记录吗?,mercurial,Mercurial,我需要将两个类的功能合并为一个,但我想知道是否可以将它们的更改历史也合并起来 这两个类都包含很多以前的更改,所以我想将它们的更改历史记录保存在一个地方以供参考。我可以在合并类中进行注释,但在IDE中,要获取已删除文件的历史记录并不容易。为此,需要将文件合并记录为合并更改集 假设变更集0是您当前的头文件,其中包含要合并到文件C中的文件A和B。为此,请将文件A重命名为C并提交为变更集1,然后更新回变更集0,将文件B重命名为C并提交为变更集2。接下来,合并这两个变更集,合并它们的内容并删除剩余的文件A

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


这两个类都包含很多以前的更改,所以我想将它们的更改历史记录保存在一个地方以供参考。我可以在合并类中进行注释,但在IDE中,要获取已删除文件的历史记录并不容易。

为此,需要将文件合并记录为合并更改集

假设变更集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 init
$echo a>a
$echo b>b
$hg加一个b
$hg commit-m“添加文件a和b”
$hg mv a c
$hg commit-m“将a重命名为c”
$hg更新0
1个文件已更新,0个文件已合并,1个文件已删除,0个文件未解析
$hg mv b c
$hg commit-m“将b重命名为c”
创建新的头
$hg合并
合并c
警告:合并期间发生冲突。
合并c不完整!(编辑冲突,然后使用“hg resolve--mark”)
0个文件已更新,0个文件已合并,1个文件已删除,1个文件未解析
使用“hg resolve”重试未解析的文件合并,或使用“hg update-C.”放弃
$ls
c.c.orig
$c类
>其他
$echo ab>c
$hg解析--马克c
$hg commit-m“将a和b合并到c中”
$hg mv c a
$hg commit-m“将c重命名回a”

如果您现在键入
hglog-fa
,您会注意到这两个文件的历史记录都会显示出来。

这不利于详细说明类合并的历史记录。在合并之前,每个文件都有各自的历史记录,从合并开始,新文件将有自己的历史记录。我真的看不到想要合并完全断开连接的历史的用例。我正在重用一个类文件,因此该类文件的历史将直接在IDE中可用。但是,您必须键入命令才能查看被删除文件的历史记录,这非常不方便。我还丢失了一些信息,比如删除类的代码侧栏中的更改注释。我有一个类似的用例:两个小的、相关的文件,它们实际上应该是一个文件(但由于某种原因,很久以前,在版本控制之前就被分开了)。将两者结合在一起是有意义的,但是能够看到两者的历史是很重要的。一个有价值的用例是如果文件被删除/重新添加,而不是在Hg中被重命名。在这种情况下,来自修改原始文件的分支的后续合并不会将这些更改合并到重新添加的文件中。但是如果你合并他们的历史,那么这应该是可能的。神奇!谢谢