【发布时间】:2011-08-08 21:15:21
【问题描述】:
假设我想恢复 Subversion 中版本 n 和 (n-1) 之间的一些更改。
我只会放回版本 (n-1) 中的文件 - 从存储库中取出它们并作为最新版本重新签入到主干中。
他们似乎想从版本 (n-1) 中创建一个分支并将其与主干合并。
这如何更好或更“正确”?
在这种情况下,它是一个目录中的几个文件。 这些文件最近没有其他更改。
【问题讨论】:
假设我想恢复 Subversion 中版本 n 和 (n-1) 之间的一些更改。
我只会放回版本 (n-1) 中的文件 - 从存储库中取出它们并作为最新版本重新签入到主干中。
他们似乎想从版本 (n-1) 中创建一个分支并将其与主干合并。
这如何更好或更“正确”?
在这种情况下,它是一个目录中的几个文件。 这些文件最近没有其他更改。
【问题讨论】:
为您和其他人彻底删除错误提交...
“还原”不是您要查找的,因为它只影响本地更改。为了恢复已经提交的修订,您必须使用否定语法使用“svn merge”,方法是在要删除的修订前面放置一个“-”(minu)。示例:
current rev: 1337
bad rev: 1330
$sh> svn merge -c -1330 svn://your.svn.url:/your.svn.path .
$sh> svn ci -m "removed revision 1330"
因此,您使用 rev "-1330" 反向合并您的存储库,然后进行签入,从而为您和其他开发人员删除 1330 中的更改。
会
【讨论】:
要删除特定修订之间的更改,例如过去的 1000 和 1010:
从签出到数据工作副本类型:
svn merge -r 1010:1000 .
这会删除工作副本中修订版 1000 和 1010 之间的所有更改(不包括添加到 1000 本身的更改)。只要您没有进行任何本地修改,并且在您确认它完成了您想要的操作之前不要重新检查结果,就可以安全地进行此操作。
在您的特定情况下,由于您只想删除单个修订版,您可以使用“-c”而不是更通用的 -r:
svn merge -c 2000 .
这相当于 -r 1999:2000 删除 1999 年和 2000 年之间的更改。
【讨论】:
使用svn merge,它对您的场景非常有用。
svn merge -c n http://xxxx/xxx/xx
【讨论】: