有一个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
答案 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的修订版。