tortoise svn 中的Revert to this version和Revert changes from this version有什么区别
这两个名字很像,但方向正好不同。可以把它们理解成:
Revert to this version = 把当前文件“退回到这个版本”。 Revert changes from this version = 把这个版本当时引入的改动“反着应用一次”。
举个最直观的例子。假设文件历史是:
r10: A
r11: A + B
r12: A + B + C
r13: A + B + C + D ← 当前
如果你选 r11 → Revert to this version,结果会变成:
A + B
也就是把 r12、r13 的改动都撤掉。注意这通常只是修改你的 working copy,之后你还需要 commit,才能让仓库正式回到这个内容状态。
而如果你选 r11 → Revert changes from this version,意思是:
“r11 相比 r10 增加了什么?把这些改动从当前版本里撤掉。”
r11 引入的是 B,所以当前:
A + B + C + D
会变成:
A + C + D
也就是说,r12、r13 后面的改动 C、D 会保留,只撤销 r11 那一次提交带来的变化。
可以记成一个特别简单的区别:
| 操作 | 含义 | | ------------------------------------ | ---------------- | | Revert to this version | 我要“回到 r11 的样子” | | Revert changes from this version | 我要“取消 r11 做过的事情” |
从 SVN 原理上看,第二种其实更接近一个 reverse merge(反向合并)。
比如有一串提交:
r100 正常
r101 张三改了 UI
r102 李四修了 Bug
r103 王五加了功能
r104 当前
突然发现 r102 这个 Bug 修复其实是错的。
这时候通常应该选:
r102 → Revert changes from this version
这样只撤掉李四在 r102 的修改,r103、r104 都尽量保留。
但如果你发现:
r102 之后整个项目方向都错了,我就想恢复到 r101 当时的状态。
那才是:
r101 → Revert to this version
所以实际工作里,“撤销某一次错误提交”一般用 Revert changes from this version;“整体回滚到某个历史快照”才用 Revert to this version。