从以前的版本合并(a" rollbacked" one)

时间:2014-08-26 13:15:08

标签: svn merge

我在我项目的 SVN trunk 工作,我是唯一的开发人员。几天前,我被要求实施一项新的要求,我开始在干线本身做这个(糟糕的选择,BTW):

r1154: Last revision with the old version (2.1.12).
r1155: I commited the new version here (3.0.0).

后来,我被要求修复2.x版本中的一些错误,所以我做了一个reverse merge并得到了与之前相同状态的下一个版本:

r1156: Reverse merge to recover r1154 state as HEAD.
r1157: Some modifications.

现在我的问题是我想恢复我在r1155中所做的修改。基本上,我想将它们与我当前的主干状态合并。如何实现:

r1158: r1157 code merged with r1155 new features.

2 个答案:

答案 0 :(得分:3)

如果您在r1157中修复的错误是最初在r1155中添加的新功能的独立,则可以尝试合并changeset像这样的新功能回到主干:

svn merge -c 1155 TRUNK_URL WORKING_COPY_PATH

这会在r1154r1155之间采用差异,并尝试在r1157之上应用它们(假设您的工作副本是最新的)。

或者,您可以尝试撤消撤消"通过反向合并删除新功能的变更集:

svn merge -c -1156 TRUNK_URL WORKING_COPY_PATH

这会在r1156r1155之间采用差异,并尝试在r1157之上应用它们(假设您的工作副本是最新的)。 -1156中的减号很重要,因为它表明这是反向合并。

请注意,这实际上并不会删除r1156。你也不是恢复"存储库到早期版本。 r1156已经提交,因此它将永久保留在存储库中,HEAD将永远不会再指向r1156。您只是将相同的更改应用于您的工作副本,但是以相反的顺序应用。这是在SVN中进行合并时需要了解的关键点。

无论哪种方式,如果您在错误修复程序和新功能中触及了相同的代码,您可能会遇到合并冲突,您必须手动解决这些冲突。解决所有冲突后,您现在必须将更改提交到工作副本:

svn commit WORKING_COPY_PATH

现在HEAD将位于r1158,您的错误修复程序和新功能都将在那里。

答案 1 :(得分:0)

在1157之上反向合并1156