1

尽管已经有很多与 相关的问题svn revert,但我不确定之前是否有人问过这个特定问题。因此,请在关闭/删除/等之前先阅读。这个问题。

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

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

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

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

4

1 回答 1

2

在 Subversion 中恢复提交是对文件应用反向补丁,然后提交。

假设文件“foo.php”在 revision 中应用了错误的更改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

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

这种合并形式被称为“cherry-picking”,让我们引用特定的一点svn help merge

“反向范围”可用于撤消更改。例如,当源和目标引用同一分支时,可以“撤消”先前提交的修订。在反向范围内,'-r N:M' 中的 N 大于 M,或者 '-c' 选项与负数一起使用:'-c -M' 等价于 '-r M:<M- 1>'。撤消这样的更改也称为执行“反向合并”。
于 2013-11-06T16:16:55.247 回答