我使用TortoiseSVN对我的 SVN 服务器进行了一些错误的代码更改。
现在头部修订版是 155,但我想删除最后 2 个修订版,以便头部修订版是 153。换句话说,我想“撤消”我的最后两个提交。
如何使用 TortoiseSVN 做到这一点?TortoiseSVN 菜单中是否存在选项,还是我需要使用命令行?
我使用TortoiseSVN对我的 SVN 服务器进行了一些错误的代码更改。
现在头部修订版是 155,但我想删除最后 2 个修订版,以便头部修订版是 153。换句话说,我想“撤消”我的最后两个提交。
如何使用 TortoiseSVN 做到这一点?TortoiseSVN 菜单中是否存在选项,还是我需要使用命令行?
如果您打开 SVN 日志,则可以右键单击修订并使用选项Revert to this revision或Revert changes from this revision。这两个选项都将更新您的工作副本(然后您可以提交)。
TortoiseSVN 中没有删除修订的选项。
作为更新的工作副本的根目录,您应该使用以下命令:
svn merge -rHEAD:153 .
这将“撤消”您对修订版 153 的所有更改,以便您的修订版 156 看起来像修订版 153。
不要忘记事后提交!
您可以在 TortoiseSvn 中执行相同的操作:打开“显示日志”界面,选择修订版 153,右键单击它并选择“从该修订版还原更改”。
不幸的是,使用 TortoiseSVN(或任何其他 SVN 客户端)没有办法真正删除修订,因为它完全从历史中消失了。更改 SVN 存储库的历史记录是困难的,并且需要在服务器上进行操作 - 请参阅这个问题:为什么不删除 Subversion 的基本功能?
但是,您可以通过进行新的签入将其更改回“撤消”签入。这通常使用一种称为“反向合并”的技术来完成。参见例如撤回意外签入
我使用了从Tortoise 网站获取的这些说明。
但重要的是在 之后单击 COMMIT。直到我意识到这一点,我才变得疯狂。
如果您需要进行较旧的修订,则您的头部修订请执行以下操作:
选择需要还原更改的文件或文件夹。如果要还原所有更改,这应该是顶级文件夹。
选择 TortoiseSVN → 显示日志以显示修订列表。您可能需要使用 Show All 或 Next 100 来显示您感兴趣的修订。
右键单击选定的修订,然后选择上下文菜单 → 恢复到此修订。这将放弃选定修订后的所有更改。
做出承诺。
从命令行:
恢复对文件的更改:
svn merge -r <newBadRev>:<oldRevToMergeBackTo> <filename>
例如:
svn merge -r 155:153 myfile.cpp