撤消Subversion中的特定修订

时间:2020-03-06 14:39:09  来源:igfitidea点击:

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

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'

解决方案

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

svn copy -r 117 source destination

然后签出该分支,然后从那里执行svnmerge.py merge -r119,120-123`

编辑:这不会撤消分支/主干中的修订。使用svn merge代替。

要撤消修订版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参数中的减号。从Subversion 1.4开始,支持-c(或者--change)开关,较早的版本可以使用-r 120:119

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

这是安全的操作,因为更改仅在工作空间中应用。我们仍然必须承诺修改存储库。

它是TortoiseSVN的最佳功能之一。我一直是命令行专家,但是Tortoise改变了主意。