虽然已经有很多与svn revert
有关的问题,但我不确定此问题是否曾被提出过。所以请在关闭/删除/等之前先阅读。这个问题。
在SVN存储库中,对文件的更改已作为更大提交的一部分进行。这个版本,让我们称之为1100,已经改变了许多文件的内容,包括有问题的文件,让我们称之为foo.php
。
随着时间的推移,对存储库进行了其他一些更改,包括文件foo.php
(假设在修订版1200,1300,1400和1500中)。
稍后很明显,在修订版1100中对文件foo.php
所做的更改是不正确的。但只有1100版本,而且只有特定文件foo.php
。
如何在不影响任何其他文件的情况下轻松还原提交1100,并在1200到1500版本中保留对文件foo.php
所做的所有中间更改?
答案 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>'。撤消这样的改变也是众所周知的 执行'反向合并'。