如何将mercurial中的旧版本文件复制到tip的新位置?

时间:2015-04-17 16:24:56

标签: mercurial

有一个C ++类,其.cpp已在多次提交时被大量修改。现在事实证明我们实际上想要一个层次结构,当前的实现保持不变并且原始的不同更改采用新名称。

如何在保留历史记录的同时将原件复制到新名称,而不会破坏我所做的更改?

我的第一个想法是将文件复制到一个分支中,然后将该分支合并到头部,但mercurial太聪明了,并尝试将所有更改应用于复制作为合并的一部分,从而导致大量冲突。

我应该采取不同的方式吗?我不知道为什么在复制后对文件进行的多变的更改应该应用于副本...

在bash中重现问题的示例:

mkdir tmp
cd tmp
hg init
echo hi > foo
hg add foo
hg commit
echo -e 'ho\nhi\nha' > foo
hg commit
hg up -r0
hg cp foo bar
echo 'howdy' >> bar
hg ci
hg up -r1
hg merge -r2 
# unexpected merge conflicts

2 个答案:

答案 0 :(得分:0)

您可以使用分支方法,然后只需执行

hg revert -r 2 --all 

处理所有冲突。

答案 1 :(得分:-1)

无需分支和合并:

hg revert -rOLDREV FILENAME
hg cp FILENAME NEW_NAME
hg revert FILENAME

其中OLDREV是您要复制到NEW_NAME的文件FILENAME的修订版。