【问题标题】:Undoing specific revisions in Subversion撤消 Subversion 中的特定修订
【发布时间】:2010-09-12 16:24:00
【问题描述】:

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

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”

【问题讨论】:

    标签: svn undo cherry-pick


    【解决方案1】:

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

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

    这是 TortoiseSVN 的最佳功能之一。我一直是命令行专家,但 Tortoise 改变了我的想法。

    【讨论】:

    • 在 Mac 上,SVN 客户端 Cornerstone 做得最好。我尝试了 Versions,但它无法与 Cornerstone 竞争此类工作。
    • +1 对于那些使用 TortoiseSVN 的人来说非常有帮助/直截了当。谢谢!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      svn copy -r 117 source destination
      

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

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

      【讨论】:

      • 我也想知道这个问题......但是这个成功不很大程度上取决于是否在 117、118 和 119 中更改了相同的文件?你会不会有从 118 checkin 中捡到一些文物的风险?
      猜你喜欢
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 2012-07-31
      • 2022-12-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 2010-09-11
      相关资源
      最近更新 更多