svn - 现在回滚一个提交我想恢复那个提交

svn - rolled back a commit now I want to restore that commit

我向主干提交了一些代码,比如说修订号 499。我测试了结果但并不完全满意,然后我使用工作副本中的命令行合并进行了恢复

svn merge -c -499 .

这工作正常,在重新测试我的代码后我意识到提交没有问题,所以我想恢复代码,我可以通过查看文件看到它有 pre 499 代码,我尝试了关注但没有用

svn merge -c 499 .

在还原/恢复提交的上下文中,我从来没有充分使用 svn,我在网上搜索但没有真正适合我的查询,我知道这将是一件非常容易但很难找到的事情。

编辑:应该说更改在存储库中

好的所以在线搜索寻找更多关于我的问题的数据,我使用以下代码解决了它,可能不是解决它的最干净的方法但它对我有用

svn merge -r HEAD:499 .

这引起了冲突,所以我选择 tf(他们的完整)将文件恢复到修订版 499

如何解决这个问题取决于您是否使用 svn commit 将合并发送到存储库。

最好的情况是您尚未提交更改。 svn merge 只影响您的工作副本,因此撤消合并就像 svn revert 一样简单。然后你的工作副本将匹配你存储库中的内容。

如果您已经提交更改以还原修订版 499,事情会稍微复杂一些,因为您需要撤消 存储库 中的更改。举个例子,假设这个恢复是作为修订版 500 提交的。你想回到修订版 499,所以你想要的是从修订版 500 中删除更改:

svn merge -c -500 .

换句话说,"revert the revert commit"。然后提交该更改以将其推送给所有人。

想想你做了什么:

You created a new revision. This revision has a set of changes that you made just like every other revision. The change may have rolled back your changes in previous revisions, but in the end, it's just another Subversion revision.

如何删除不再需要的修订版?您执行 反向合并 就像您所做的那样,以摆脱您不想要的其他更改。

要回滚一个回滚,只需对该特定修订进行反向合并即可:

$ svn log -r503
--------------------------------------------------------------------------
r503 | user2751034 | 2015-03-05 13:37:48 -0500 (Thu, 05 Mar 2015) | X lines
Rolled back change in revision 400
--------------------------------------------------------------------------

因此,您在修订版 503 中撤消了修订版 400。(而且,这就是我们提供良好、详细的提交评论的原因!)

因此,要撤消撤消您在修订版 400 中的更改的更改...

$ svn merge -c -503 .

而且,现在您在版本 400 中所做的更改又回到了存储库中!