【问题标题】:Merging from previous revision (a "rollbacked" one)从以前的版本合并(一个“回滚”的版本)
【发布时间】:2014-08-26 13:15:08
【问题描述】:

我在我的项目的 SVN 主干 中工作,我是唯一的开发人员。几天前,我被要求实现一个新要求,我开始在主干本身中执行它(不好的选择,顺便说一句):

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.

【问题讨论】:

    标签: svn merge


    【解决方案1】:

    如果您在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,您的错误修复和新功能都将在那里。

    【讨论】:

    • 太好了。现在可能是考虑使用发布分支和功能分支来帮助避免这种情况的好时机。
    【解决方案2】:

    在 1157 之上反向合并 1156

    【讨论】:

    • 感谢您的回答。它不会删除从 1156 到 1157 所做的每一个更改吗?据我了解,反向合并的目的是to revert a change which has already been commited。还有为什么选择1156?使用 1155 这是我想要从中恢复代码的修订版不是更有意义吗?如果您能详细说明答案,我将不胜感激...
    • @XtremeBiker r1156 已提交的更改。使用这种方法,您基本上将“撤消撤消”;或者,您可以重新应用来自 r1155 的更改。无论哪种方式,请注意,如果您在错误修复和新功能中触及相同的代码段,您可能会遇到合并冲突,您必须手动解决。
    • @ThisSuitIsBlack 不好,如果我理解正确的话:我将 r1157 反向合并到 r1156,所以我在工作副本中再次获得 r1556 状态。那么我应该将它与 r1155 合并以应用 3.x 更改吗?之后如何恢复 1157 中的错误修复?真是一团糟:-S
    • @XtremeBiker 我认为您不太了解合并的作用。它将存储库恢复到以前的状态。合并只是将变更集(换句话说,一组差异)应用于您的工作副本。例如,您可以将r1154r1155 之间的差异应用到r1157 的工作副本中,以将您最初在r1155 中所做的更改“重新添加”到您的工作副本中。然后,您可以提交更改以获取 r1158,其中包含错误修复和新功能。详情见我的回答。
    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2013-05-12
    • 2023-01-29
    • 2019-03-14
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多