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”

4

3 回答 3

36

要撤消修订 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(or --change) 开关,旧版本可以使用-r 120:119.

于 2008-09-24T10:34:52.727 回答
8

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

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

It is one of the best features of TortoiseSVN. I've always been a command line guy, but Tortoise changed my mind.

于 2008-09-27T06:41:58.990 回答
-2

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

svn copy -r 117 source destination

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

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

于 2008-09-24T10:14:14.197 回答