22

我使用TortoiseSVN对我的 SVN 服务器进行了一些错误的代码更改。

现在头部修订版是 155,但我想删除最后 2 个修订版,以便头部修订版是 153。换句话说,我想“撤消”我的最后两个提交。

如何使用 TortoiseSVN 做到这一点?TortoiseSVN 菜单中是否存在选项,还是我需要使用命令行?

4

5 回答 5

13

如果您打开 SVN 日志,则可以右键单击修订并使用选项Revert to this revisionRevert changes from this revision。这两个选项都将更新您的工作副本(然后您可以提交)。

TortoiseSVN 中没有删除修订的选项。

于 2012-12-05T00:26:32.347 回答
3

作为更新的工作副本的根目录,您应该使用以下命令:

svn merge -rHEAD:153 .

这将“撤消”您对修订版 153 的所有更改,以便您的修订版 156 看起来像修订版 153。

不要忘记事后提交!

您可以在 TortoiseSvn 中执行相同的操作:打开“显示日志”界面,选择修订版 153,右键单击它并选择“从该修订版还原更改”。

于 2012-12-05T00:33:31.027 回答
2

不幸的是,使用 TortoiseSVN(或任何其他 SVN 客户端)没有办法真正删除修订,因为它完全从历史中消失了。更改 SVN 存储库的历史记录是困难的,并且需要在服务器上进行操作 - 请参阅这个问题:为什么不删除 Subversion 的基本功能?

但是,您可以通过进行新的签入将其更改回“撤消”签入。这通常使用一种称为“反向合并”的技术来完成。参见例如撤回意外签入

于 2012-12-05T00:32:38.447 回答
1

我使用了从Tortoise 网站获取的这些说明。

但重要的是在 之后单击 COMMIT。直到我意识到这一点,我才变得疯狂。

如果您需要进行较旧的修订,则您的头部修订请执行以下操作:

  1. 选择需要还原更改的文件或文件夹。如果要还原所有更改,这应该是顶级文件夹。

  2. 选择 TortoiseSVN → 显示日志以显示修订列表。您可能需要使用 Show All 或 Next 100 来显示您感兴趣的修订。

  3. 右键单击选定的修订,然后选择上下文菜单 → 恢复到此修订。这将放弃选定修订后的所有更改。

  4. 做出承诺。

于 2014-06-09T12:35:01.830 回答
0

从命令行:

恢复对文件的更改:

svn merge -r <newBadRev>:<oldRevToMergeBackTo> <filename>

例如:

svn merge -r 155:153 myfile.cpp
于 2012-12-05T00:28:58.487 回答