2010-10-27 108 views
7

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

的变化发生了,因为我从变更见。现在,我想在提交之前恢复文件。

我SVN恢复路径/到/文件,但它不要求输入密码或任何东西。什么都没有发生。

+0

请更详细一点。 – splash 2010-10-27 09:36:11

+0

当我为每个文件执行svn还原时没有任何事情发生。 – Woppi 2010-10-27 09:39:10

+0

请更详细一点。如果更改已提交,则可以恢复到预先提交的修订版本。 – user434507 2010-10-27 09:40:57

回答

3

解决:SVN 合并-r1234:4321路径/到/ yourfile路径/到/ thefileyouwanttogobackto,

其中
1234是你的修订
4321是你想回去修改。

3

你可以做一个“反向合并”,即“应用”所有更改从当前的修订,要回去修改(即撤销所有要回去的变化从修订到目前修订版)。

svn merge -r HEAD:nnnn . 

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

查看更改后,解决所有冲突等,请使用svn commit将更改推送到存储库。

+0

是的,谢谢zellus,我的错!我已经更新了我的答案以反映这一点。 – 2010-10-27 09:52:38

+0

http://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.undo详细讨论了恢复提交。 – zellus 2010-10-27 09:52:55

+0

它说“不能替换内部的目录” – Woppi 2010-10-27 10:17:36

1

如果你知道你要在这里恢复某个版本是恢复它多了一个途径。

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

它发现在R1031改变了所有文件,并与从版本相同的文件替换1030

PS:也请小心,如果你要恢复的文件并没有出现在1030它可能可能不符合你的预期。

0

详情请参阅此博客条目:

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

一些好的背景说明:

要了解这里发生了什么,需要什么 合并命令会概念的一些背景:它记录哪些变更必须由 修改为N修改为修订N + 1(称为增量) ,并将其应用于工作副本。这不是我们在 方案中想要的,所以我们将命令 一行的修订顺序颠倒过来。实际上,我们告诉合并命令以其他方式创建一个增量 。结果是代码库的“倒带”。

而且也,在评论中,如何做到这一点的TortoiseSVN:

要在TortoiseSVN做到这一点,用鼠标右键单击该目录或文件 你想恢复,并使用“合并“从TortoiseSVN菜单。选择 选项“合并两棵不同的树”。在“发件人”下方,选择修改头 。在“收件人”下选择旧版本+1(即如果您希望 恢复到版本169,请在版本框中输入修订版本170)。在SVN Book

0

最简单的方式描述:

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

将撤销在变更303所做的任何更改,您可以查看并根据需要进行提交。