【问题标题】:How to revert a commit made to a particular file in SVN?如何恢复对 SVN 中特定文件的提交?
【发布时间】:2013-11-07 00:55:31
【问题描述】:

虽然已经有很多与svn revert 相关的问题,但我不确定以前是否有人问过这个特定问题。因此,请在关闭/删除/等之前先阅读。这个问题。

在 SVN 存储库中,对文件的更改已作为较大提交的一部分进行。这个版本,我们称之为 1100,改变了许多文件的内容,包括有问题的文件,我们称之为 foo.php

随着时间的推移,对存储库进行了其他几项更改,包括对文件 foo.php 进行了更改(假设在修订版 1200、1300、1400 和 1500 中)。

后来很明显,在修订版 1100 中对文件 foo.php 所做的更改是不正确的。但只有修订版 1100 和特定文件 foo.php

如何在不影响任何其他文件的情况下轻松恢复提交 1100,并保留对文件 foo.php 所做的所有中间更改在修订版 1200 到 1500 中?

【问题讨论】:

    标签: svn


    【解决方案1】:

    在 Subversion 中恢复提交就是将反向补丁应用到文件然后提交。

    假设文件“foo.php”在修订版N 中应用了错误的更改。你可以通过运行类似的东西来查看发生了什么变化

    svn diff -c N ^/path/to/that/foo.php
    

    现在你可以通过运行获得反向差异

    svn diff -c -N ^/path/to/that/foo.php
    

    所以要恢复更改

    svn merge -c -N ^/path/to/that/foo.php
    

    当你的工作树有一个合理的状态时,然后提交。

    这种合并形式叫做“摘樱桃”,我们来引用svn help merge的特殊位:

    “反向范围”可用于撤消更改。例如,当 source 和 target 指的是同一个分支,一个先前提交的 修订可以“撤消”。在反向范围内,N 大于 M in '-r N:M',或 '-c' 选项与负数一起使用:'-c -M' 相当于'-r M:'。撤消这样的更改也是已知的 作为执行“反向合并”。

    【讨论】:

    • 符号^ 在这种情况下代表什么?
    • 它是存储库根目录的快捷方式。 svnbook.red-bean.com/en/1.7/svn.advanced.externals.html,大概讲到一半。
    • 第二个命令似乎不起作用,无论是字面意义上的-M,还是用当前修订号替换的M
    • @Alex,对不起,我的命令行svn-fu 刚刚被证明是生锈的——“诀窍”是将一个负的修订号传递给-c,所以我修复了例子。很抱歉造成混乱。
    • 好吧,我发现我的错误了。您的建议似乎可以解决我的问题。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-10-31
    • 2011-08-11
    • 1970-01-01
    • 2020-05-03
    • 2015-03-31
    • 2020-12-22
    • 2015-02-07
    • 2015-08-03
    相关资源
    最近更新 更多