6

背景:

起初有一个文件base.c,该文件在只有一个分支的存储库中Base

Base被分支为Extended-branch。然后这个新分支对base.c.

如果在文件base.c中修复了错误Base,它们将被合并到Extended.

base.c事实证明,在分支中添加太多东西Extended不是一个好主意,所以文件被复制到ext.c. 然后从 中删除了大部分Extended添加内容base.c,并Base从 中删除了功能ext.c。所以此时base.cinExtended与 in 非常相似Base

问题:

当文件被拆分时,Mercurial 被告知这ext.c是 的副本base.c,因为它们共享一个共同的历史记录。不幸的是,这不是一个好主意。

现在,如果在Base分支上修复了错误并合并到Extended,Mercurial 认为这些更改应该同时应用于base.cext.c,即使后者不再与前者有任何相似之处。这使得合并非常烦人。

有没有办法告诉 Mercurialext.c不再被视为相同base.c?一种解决方案是ext.c用新文件替换,但历史不会跟随。

4

1 回答 1

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只是一个死胡同),因此传播更改应该没有问题。

于 2014-05-14T10:42:16.140 回答