如何将我的Subversion仓库回滚到早期版本

5
我们刚刚在一个问题上走了错误的路线花费了两个星期的时间(伴随着我们在SVN仓库中提交的所有内容)。现在我们想出了正确的解决方案(需要我们的代码回到两周前的状态)。我们本应该在两周前分支处理,但现在这已经无关紧要了。
显然,我可以再次检出该项目并将其复制到当前版本的存储库上并进行检查。
是否有更干净的方法可以避免二次检查?

4
撤销 SVN 红皮书中的更改。 - Mike
你可以在仓库中删除主干,然后将它从早期的版本复制回HEAD。 - Blorgbeard
1
此外,您仍然可以从任何想要的修订版本创建分支。 - Blorgbeard
@Mike,这正是我在寻找的。如果你想把它作为答案发布,我会接受并给你信用。 - BIBD
3个回答

3
有很多方法可以实现您想要的效果。最简单的方法是在开发机器上检出代码库的新副本,指定在您走错开发路径之前进行的提交的版本。然后,只需将该代码作为最新版本检入即可。这样不仅可以有效地“还原”代码库到那个版本,如果发现您错误解决方案中的某个元素仍然有用,您仍然可以轻松访问这些元素。
此外,正如之前所说,您可以在任何时候、任何版本处对代码库进行分支。只需从开始工作之前的版本中切一个分支,然后沿着新的开发路径继续。请记住,将该分支合并回主干可能会有问题;您希望在分支的开发结果能够整体替换主干的代码库。这是可能的,但可能会变得混乱。

2

处理这个问题有几种方式:

撤销您的更改:

 $ svn merge -r$rev2:$rev1 .

假设$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

2

迈克提供的解决方案对我有效。

在一个单独的分支中

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

这将撤销302和303之间的更改。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接