2008-09-24 71 views
30

假设我有一组资源库文件夹的提交...撤消特定修订

123 (250 new files, 137 changed files, 14 deleted files) 
122 (150 changed files) 
121 (renamed folder) 
120 (90 changed files) 
119 (115 changed files, 14 deleted files, 12 added files) 
118 (113 changed files) 
117 (10 changed files) 

我希望得到一个工作拷贝,其中包括来自117版本以后的所有更改,但不包括更改修订版118和120.

编辑:或许使问题更清楚,我想撤消在118和120中进行的更改,同时保留所有其他更改。该文件夹包含数百个子文件夹中的数千个文件。

达到此目的的最佳方法是什么?

答案,感谢布鲁诺和Bert,是命令(在这种情况下,除去120进行完全合并后)

svn merge -c -120 . 

注意,版本号必须与指定领先减号。 “-120”而不是“120”

回答

31

要撤消的修订118和120:

svn up -r HEAD  # get latest revision 
svn merge -c -120 . # undo revision 120 
svn merge -c -118 . # undo revision 118 
svn commit   # after solving problems (if any) 

另请参见说明书和附图的Undoing changes

请注意-c -120参数中的减号。从Subversion 1.4开始支持-c(或--change)交换机,旧版本可以使用-r 120:119

-2

我想你可以创建修订117的一个分支,然后合并一切,除了118和120

svn copy -r 117 source destination 

然后结帐这个分支,并从那里做svnmerge.py merge -r119,120-123

编辑:这不会撤销分支/中继中的修订。改为使用svn merge

+1

我也想知道这件事......但是这样做的成功与否很大程度上取决于117,118和119是否改变了相同的文件?你会不会有从118登记中拿到一些人工制品的风险? – 2008-09-24 10:33:32

8

如果您使用Subversion的Windows客户端TortoiseSVN,有一种更直接的方法。您只需点击以查看更新工作副本中的日志,选择要撤消的修订,右键单击,然后选择“恢复这些修订中的更改”。

这是一项安全操作,因为这些更改仅适用于您的工作区。您仍然必须承诺修改您的存储库。

这是TortoiseSVN最好的功能之一。我一直是一个命令行的人,但乌龟改变了我的想法。

+1

在Mac上,SVN客户端Cornerstone可以做到最好。我尝试过版本,但无法与Cornerstone竞争这类工作。 – 2011-12-05 09:37:24