5

我们刚刚花了两周的时间在错误的路径上解决一个问题(伴随着对我们 SVN 存储库的所有提交)。我们现在已经提出了正确的解决方案(这需要我们的代码库恢复到两周前的状态)。我们应该在两周前分支,但现在已经无关紧要了。

显然,我可以对项目进行第二次签出,然后将其复制到存储库的当前版本并签入。

有没有更清洁的方法可以在没有第二次结账的情况下做到这一点?

4

3 回答 3

3

有很多方法可以做你想做的事。最简单的方法是将代码库的新副本签出到开发机器,指定在您走错开发路径之前所做的提交的修订。然后,只需将该代码作为最新版本重新检入即可。您不仅可以有效地将代码库“还原”到该修订版,而且如果您发现错误解决方案的某些元素毕竟有用,您仍然可以轻松访问这些元素。

此外,如前所述,您可以随时在任何修订版中分支代码库。只需在开始工作之前剪切修订版的一个分支,然后继续您的新开发路径。请记住,将此分支合并回主干可能会出现问题;您希望分支开发的最终结果来替换主干批发的代码库。这是可能的,但它可能会变得混乱。

于 2013-07-08T19:55:23.697 回答
2

有几种处理方法:

还原您的更改:

 $ 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
于 2013-07-09T18:34:38.843 回答
2

Mike 提供的解决方案对我有用。

在单独的分支中

$ svn merge -r 303:302 http://svn.example.com/repos/calc/trunk

(这会撤消 302 和 303 之间的更改)。

然后你可以在你的分支中提交更改,测试然后像往常一样合并回主干。

于 2013-07-09T17:23:55.897 回答