我在我项目的 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.
答案 0 :(得分:3)
如果您在r1157
中修复的错误是最初在r1155
中添加的新功能的独立,则可以尝试合并changeset像这样的新功能回到主干:
svn merge -c 1155 TRUNK_URL WORKING_COPY_PATH
这会在r1154
和r1155
之间采用差异,并尝试在r1157
之上应用它们(假设您的工作副本是最新的)。
或者,您可以尝试撤消撤消"通过反向合并删除新功能的变更集:
svn merge -c -1156 TRUNK_URL WORKING_COPY_PATH
这会在r1156
和r1155
之间采用差异,并尝试在r1157
之上应用它们(假设您的工作副本是最新的)。 -1156
中的减号很重要,因为它表明这是反向合并。
请注意,这实际上并不会删除r1156
。你也不是恢复"存储库到早期版本。 r1156
已经提交,因此它将永久保留在存储库中,HEAD
将永远不会再指向r1156
。您只是将相同的更改应用于您的工作副本,但是以相反的顺序应用。这是在SVN中进行合并时需要了解的关键点。
无论哪种方式,如果您在错误修复程序和新功能中触及了相同的代码,您可能会遇到合并冲突,您必须手动解决这些冲突。解决所有冲突后,您现在必须将更改提交到工作副本:
svn commit WORKING_COPY_PATH
现在HEAD
将位于r1158
,您的错误修复程序和新功能都将在那里。
答案 1 :(得分:0)
在1157之上反向合并1156