有没有办法恢复特定的变更集?
正如我从变更集中看到的那样,已经提交了更改。现在,我想在文件提交之前恢复它们。
我做了svn revert path / to / file但是它没有要求输入密码或任何东西。什么也没发生。
答案 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。