正确做法是使用反向合并(Reverse Merge)撤销指定提交:先通过Show Log或svn log确定目标版本号(如r123),再执行svn merge -c -123 .(命令行)或在TortoiseSVN中选择“Merge a single revision”并输入-123,最后提交生成抵消性新版本。

SVN 无法真正“删除”已提交的版本,但可以通过 反向合并(revert commit) 来撤销错误修改的影响,让工作副本回到某个旧版本的状态,并提交一次“抵消性变更”。这是标准、安全且可追溯的做法。
确认要撤销的提交版本号
先找出错误修改对应的 revision 号(比如 r123)。可通过以下方式查看:
- TortoiseSVN:右键 → “Show log”,找到对应提交,记下 revision 号
- 命令行:
svn log -l 20查看最近20条日志 - 注意:确保你有该 revision 的读取权限,且未被管理员强制删除历史
执行反向合并(核心操作)
在本地工作副本目录中,将目标 revision 的修改“逆向应用”——即取消它带来的所有变更:
《SVN视频教程》,SVN:全称Subversion,是代码版本管理软件,管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。许多人会把版本控制系統想像成某种“时光机器”。
- 命令行:
svn merge -c -123 .(注意-c前面的负号,表示反向合并 r123) - TortoiseSVN:右键 → “Merge” → 选择 “Merge a single revision” → 输入 -123(带负号)→ Next → Merge
- 合并后,本地文件会恢复到 r122 的状态(相当于撤销 r123 的改动),但尚未提交
测试并提交撤销结果
反向合并只是本地操作,必须验证无误后显式提交,才能同步到远程库:
- 手动检查关键文件是否已还原,运行必要测试(如编译、单元测试)
- 执行
svn status确认只有预期的修改(通常是被 revert 的那些文件) - 提交:
svn commit -m "Revert r123: undo incorrect config change" - 这次提交会产生新 revision(如 r124),内容是 r123 的逆操作,历史完整可查
特殊情况处理
如果错误提交涉及多个 revision 或已叠加后续修改,需谨慎操作:
- 撤销连续多个版本:用
svn merge -c -123,-124,-125 .(逗号分隔,每个带负号) - 撤销一个版本范围:如 r120~r123 →
svn merge -r 123:119 .(注意是高位在前,低位在后) - 若合并冲突:SVN 会提示,需手动解决冲突后再提交
- 不建议直接删库/重置历史:SVN 设计为不可变历史,强行破坏会丢失协作线索










