如何恢复对SVN中特定文件的提交?

时间:2013-11-06 16:01:08

标签: svn

虽然已经有很多与svn revert有关的问题,但我不确定此问题是否曾被提出过。所以请在关闭/删除/等之前先阅读。这个问题。

在SVN存储库中,对文件的更改已作为更大提交的一部分进行。这个版本,让我们称之为1100,已经改变了许多文件的内容,包括有问题的文件,让我们称之为foo.php

随着时间的推移,对存储库进行了其他一些更改,包括文件foo.php(假设在修订版1200,1300,1400和1500中)。

稍后很明显,在修订版1100中对文件foo.php所做的更改是不正确的。但只有1100版本,而且只有特定文件foo.php

如何在不影响任何其他文件的情况下轻松还原提交1100,并在1200到1500版本中保留对文件foo.php所做的所有中间更改?

1 个答案:

答案 0 :(得分:2)

在Subversion中恢复提交是将反向修补程序应用于文件然后提交。

假设文件“foo.php”在修订版N中应用了错误的更改。您可以通过运行

之类的内容来查看更改内容
svn diff -c N ^/path/to/that/foo.php

现在你可以通过运行

获得反向差异
svn diff -c -N ^/path/to/that/foo.php

所以要恢复更改吗

svn merge -c -N ^/path/to/that/foo.php

当你的工作树有一个合理的状态,然后提交。

这种形式的合并称为“挑选樱桃”,让我们引用svn help merge的特定位:

“反向范围”可用于撤消更改。例如,何时 source和target指的是同一个分支,一个先前提交的分支 修改可以“撤消”。在反向范围内,N大于M in '-r N:M',或'-c'选项使用负数:' - c -M' 等价于'-r M:< M-1>'。撤消这样的改变也是众所周知的 执行'反向合并'。