我们刚刚花了两周的时间在错误的路径上解决一个问题(伴随着对我们 SVN 存储库的所有提交)。我们现在已经提出了正确的解决方案(这需要我们的代码库恢复到两周前的状态)。我们应该在两周前分支,但现在已经无关紧要了。
显然,我可以对项目进行第二次签出,然后将其复制到存储库的当前版本并签入。
有没有更清洁的方法可以在没有第二次结账的情况下做到这一点?
我们刚刚花了两周的时间在错误的路径上解决一个问题(伴随着对我们 SVN 存储库的所有提交)。我们现在已经提出了正确的解决方案(这需要我们的代码库恢复到两周前的状态)。我们应该在两周前分支,但现在已经无关紧要了。
显然,我可以对项目进行第二次签出,然后将其复制到存储库的当前版本并签入。
有没有更清洁的方法可以在没有第二次结账的情况下做到这一点?
有很多方法可以做你想做的事。最简单的方法是将代码库的新副本签出到开发机器,指定在您走错开发路径之前所做的提交的修订。然后,只需将该代码作为最新版本重新检入即可。您不仅可以有效地将代码库“还原”到该修订版,而且如果您发现错误解决方案的某些元素毕竟有用,您仍然可以轻松访问这些元素。
此外,如前所述,您可以随时在任何修订版中分支代码库。只需在开始工作之前剪切修订版的一个分支,然后继续您的新开发路径。请记住,将此分支合并回主干可能会出现问题;您希望分支开发的最终结果来替换主干批发的代码库。这是可能的,但它可能会变得混乱。
有几种处理方法:
$ svn merge -r$rev2:$rev1 .
这是假设 $rev2 > $rev1。这将取消这两个修订之间的更改。如果您要退出单个修订版,则可以使用以下命令:
$ svn merge -c -$rev .
也就是说,修订应该是负数。这将仅退出该一个修订版。
如果这项工作不是在主干上完成,而是在一个分支上完成,并且您非常想丢弃该分支,您可以简单地重新创建分支,甚至删除旧的坏分支。可以从任何时间点创建分支(和标签):
$ svn cp -r$rev $REPO/branches/$bad_branch/$proj $REPO/branches/$new_branch
$ svn delete $REPO/branches/$bad_branch
Mike 提供的解决方案对我有用。
在单独的分支中
$ svn merge -r 303:302 http://svn.example.com/repos/calc/trunk
(这会撤消 302 和 303 之间的更改)。
然后你可以在你的分支中提交更改,测试然后像往常一样合并回主干。