撤销Subversion中特定的修订版本

33

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

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个回答

37

撤销修订版本 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)

请参考撤销修改中的描述。

注意-c -120参数中的减号。-c(或--change)开关支持Subversion 1.4及以上版本,旧版本可以使用-r 120:119


8
如果您使用Subversion的Windows客户端TortoiseSVN,就有更加直截了当的方法。只需在升级后的工作副本中点击查看日志,选择要撤消的修订版本,右键单击并选择“从这些修订版本中还原更改”,即可实现操作。
这是一项安全操作,因为更改仅应用于您的工作区。您仍然需要提交以修改您的存储库。
这是TortoiseSVN最好的功能之一。我一直都是一个命令行用户,但Tortoise改变了我的想法。

1
在 Mac 上,SVN 客户端 Cornerstone 是最好的选择。我尝试过 Versions,但它无法与 Cornerstone 相比处理这种类型的工作。 - William Macdonald
+1 对于那些使用TortoiseSVN的人来说非常有帮助/简单明了。感谢您! - Mansoor Siddiqui

-2

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

svn copy -r 117 source destination

那么,请检出此分支,然后执行 svnmerge.py merge -r119,120-123

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


1
我也曾经想过这个问题...但是这不是非常依赖于117、118和119是否更改了相同的文件吗?难道你不担心会从118次提交中捕捉到某些人为痕迹吗? - anonymous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接