背景
首先有一个文件base.c
,该文件位于只有一个分支Base
的存储库中。
Base
分支为Extended
- 分支。然后,这个新分支对base.c
进行了一些更改。
如果base.c
中的文件Base
中修复了错误,则会将其合并到Extended
。
事实证明,向base.c
分支中的Extended
添加太多内容并不是一个好主意,因此将文件复制到ext.c
。然后,大多数Extended
个添加内容都会从base.c
中删除,Base
来自ext.c
。因此,此时base.c
中的Extended
与Base
中的ext.c
非常相似。
问题:
当文件被拆分时,Mercurial被告知base.c
是Base
的副本,因为他们共享共同的历史记录。不幸的是,这不是一个好主意。
现在,如果错误在Extended
分支上修复并合并到base.c
,Mercurial认为这些更改应适用于ext.c
和ext.c
,即使后者不再与前者有任何相似之处。这使得合并非常烦人。
有没有办法告诉Mercurial base.c
不再被认为与ext.c
相同?一种解决方案是用新文件替换{{1}},但随后不会跟踪历史记录。
答案 0 :(得分:2)
您可以断开与hg forget ext.c
的连接,然后将hg add ext.c
作为新文件。但是如果你使用ext.c
的最新修订版进行此操作,那么到目前为止你将丢失所有历史记录。
您可以做的是添加ext.c
的早期版本,甚至可能在重命名之前添加,并重播(移植)其历史。您可以将ext.c
的历史记录添加为过去修订的分支,并将其合并到提示中:
---o---o---o---(tip)--(merge)
\ /
e---e---e ... e
或者也许没关系,您只需将ext.c
的历史记录添加到当前tip
:
---o---o---o---(tip)--e--e--e--e
这些方法都不涉及任何历史重写(ext.c
的“遗忘”版本只是一个死胡同),所以传播更改应该没有问题。