svn从变更集恢复

时间:2010-10-27 09:31:27

标签: svn

有没有办法恢复特定的变更集?

正如我从变更集中看到的那样,已经提交了更改。现在,我想在文件提交之前恢复它们。

我做了svn revert path / to / file但是它没有要求输入密码或任何东西。什么也没发生。

5 个答案:

答案 0 :(得分:3)

您可以执行“反向合并”,即“应用”当前修订版中的所有更改到您要返回的修订版(即撤消要修改的修订版中的所有更改到当前版本)。

svn merge -r HEAD:nnnn .

其中nnnn是您要返回的修订版本。 http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.merge.html

在查看更改,解决任何冲突等后,使用svn commit将更改推送到存储库。

答案 1 :(得分:3)

解决: svn merge -r1234:4321 path / to / yourfile path / to / thefileyouwanttogobackto,

其中
1234是你的修订版 4321是您要返回的修订版。

答案 2 :(得分:2)

最简单的方法在SVN Book

中描述
$ svn merge -c -303 http://svn.example.com/repos/calc/trunk

这将取消在变更集303中所做的任何更改,您可以根据需要查看和提交它们。

答案 3 :(得分:1)

如果您知道某些修订版本,则需要还原一种方法。

svn diff -c r1031 | grep ^Index | awk '{ print $2}' | xargs -I {file} svn export -r 1030 {file} {file}

它会在r1031中找到所有文件已更改,并将其替换为修订版1030中的相同文件。

P.S。:另外请注意,如果您想要还原的文件在1030年不存在。它可能不会按照您的预期工作。

答案 4 :(得分:0)

有关详细信息,请参阅此博客条目:

http://blog.mafr.de/2008/05/13/revert-a-commit-in-svn/

有一些很好的背景说明:

  

要了解这里发生的事情需要一些背景知识   merge命令在概念上是:它记录了必须进行的更改   修订版N将其转换为修订版N + 1(称为delta)   并将其应用于工作副本。这不是我们想要的   方案,所以我们反转命令的通常修订顺序   线。实际上,我们告诉merge命令创建一个delta   另一边。结果是代码库的“倒带”。

此外,在评论中,如何在TortoiseSVN中执行此操作:

  

要使用TortoiseSVN执行此操作,请右键单击目录或文件   你想恢复并使用TortoiseSVN菜单中的“Merge”。选择   选项“合并两棵不同的树”。在“发件人”下选择头部   修订。在“收件人”下选择旧版本+ 1(即如果您愿意   要恢复到修订版169,请在框中键入修订版170。