撤消Subversion中的特定修订

时间:2008-09-24 10:05:23

标签: svn undo cherry-pick

假设我在存储库文件夹中有一组提交......

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中所做的更改,同时保留所有其他更改。该文件夹包含数百个子文件夹中的数千个文件。

实现这一目标的最佳方法是什么?

答案,感谢Bruno和Bert,是命令(在这种情况下,在执行完全合并后删除120)

svn merge -c -120 .

请注意,必须使用前导减号指定修订号。 '-120'不是'120'

3 个答案:

答案 0 :(得分:32)

撤消修订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

答案 1 :(得分:8)

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

这是一种安全的操作,因为更改仅应用于您的工作区。您仍然需要提交修改存储库。

这是TortoiseSVN的最佳功能之一。我一直都是一个命令行,但是Tortoise改变了主意。

答案 2 :(得分:-2)

我想您可以从修订版117创建一个分支,然后合并除118和120之外的所有内容。

svn copy -r 117 source destination

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

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