使用Subversion回滚更改集的最佳方法是什么?

时间:2008-10-16 20:49:21

标签: svn version-control

我一直在使用各种源代码控制系统,但是当涉及到还原变更时,我还不是专家。在这种情况下,有人可以提供帮助:

方案

  • 鉴于修订版#5中引入了一个错误
  • 修订版#5中有3个文件被更改
  • 2个文件中的更改导致了错误
  • 当客户在版本#9(HEAD)
  • 的版本中发现错误时
  • 然后,2个导致修订版本#5的错误的文件必须恢复为修订版#4
  • 从版本#6到HEAD的更改必须应用于两个文件

我希望必须有一种方法可以比较两个文件的修订版#4和#5,并生成一个补丁来撤消版本#5中的更改,然后可以将其应用于HEAD修订版以回滚缺陷

8 个答案:

答案 0 :(得分:15)

通常reverse merge足以回滚已提交的更改......

答案 1 :(得分:7)

要阅读详细信息,请参阅: svn manual - Undoing Changes

正如马克所描述的那样,你想做:
svn merge -r 5:4 file1 file2
这意味着合并从4到5的变化,即。撤消更改

您也可以输入:
svn merge -c -5 file1 file2
这意味着应用在向后提交修订版5时发生的更改。

接下来,您应该手动查看更改。

最后,您必须提交更改(上面的合并只更改了您的工作副本)。

答案 2 :(得分:6)

这是一本link to svn书,解释了所有关于还原和历史的内容。

要做差异你会做类似svn diff -r 4:5 somefile.txt

答案 3 :(得分:2)

我假设你在我的回答中使用了TortoiseSVN。

我认为您的方案不会导致文件回滚,因为您仍希望保留每个文件的历史记录。大多数情况下,您要做的只是查找并修复错误并对此文件进行新的更改。

如果你想比较两个版本,在tortoiseSvn中很容易,右击文件,然后进入TortoiseSvn-> Show Log。然后选择要比较的修订,右键单击,然后选择比较修订。

如果你想找到谁对这个bug负责,你可以使用TortoiseSVN中的菜单项Blame ...这将告诉你谁修改了每一行以及修改了哪个版本。

哦,如果你想将文件还原回以前的版本,可以在TortoiseSvn->显示日志中执行,然后选择要恢复的版本,右键单击并选择还原到此版本。

答案 4 :(得分:2)

我会选择EtienneT的回答。但在“还原到此修订版”下方,还有“从此修订版还原更改”选项。该选项完全符合罗伯特沃克的需求,以撤消修订版#5的变更。不要忘记提交更改。

答案 5 :(得分:1)

检查当前版本,然后 svn merge -r 5:4 file1 file2 (那是来自记忆,可能不完全正确)

答案 6 :(得分:1)

我认为您需要先在5:4之间反向合并,然后还原正确的文件

  1. svn merge -r 5:5 http://svn.example.com/repos/calc/trunk

  2. svn revert correctfile

  3. 你可能最终会在2buggy文件上处于奇怪的状态 希望你可以手动解决。

答案 7 :(得分:0)

如果您使用的是http://tortoisesvn.tigris.org/,那么这是一个相当简单的过程。只需右键单击一个文件并选择“日志”即可获得现在和所选返回之间的更改列表。然后,将两个文件恢复为修订版#4并提交更改:)