SVN 版本回退(九)
9.版本回退
一、撤销未提交的修改
svn revert
适用场景:修改了文件但尚未提交,想放弃所有本地改动,恢复到上次更新时的状态。
1. 撤销单个文件
# 查看状态(M 表示已修改)
svn status
M readme
# 撤销修改
svn revert readme
Reverted 'readme'
# 再次查看状态(无改动)
svn status2. 撤销整个目录(递归)
svn revert -R trunk-
-R表示递归处理目录下所有文件。
注意:
svn revert 是不可逆操作,一旦执行,所有未提交的本地修改将永久丢失。
二、撤销已提交的版本
svn merge反向合并
适用场景:已经提交了某个版本(如版本 22),想回退到之前的版本(如版本 21),并生成一个新版本来记录这次回退。
1.操作思路
- 使用
svn merge 命令,将当前版本(较新)与目标旧版本之间的差异反向应用,从而撤销旧版本中的所有更改。 - 这种操作称为 reverse merge。
2.命令示例
# 假设当前版本是 22,想撤销到版本 21
svn merge -r 22:21 readme-
-r 22:21 表示取版本 22 到版本 21 的反向差异(即撤销 22 相比 21 的所有修改)。 - 执行后,工作副本中的
readme会恢复到版本 21 的内容。 - 然后执行
svn commit提交这个变更,生成一个新版本(如版本 23),从而完成回退。
3.完整步骤
svn update # 确保工作副本是最新的
svn merge -r 22:21 readme # 反向合并
svn commit -m "Revert to revision 21" # 提交回退三、两种回退方式对比
| 场景 | 命令 | 是否影响版本库 | 可恢复性 |
|---|---|---|---|
| 撤销未提交的修改 | svn revert |
否(仅本地) | 不可恢复(丢失本地改动) |
| 撤销已提交的版本 | svn merge -r 当前版本:目标版本 |
是(生成新版本) | 可通过再次合并恢复 |
提示:
svn merge 用于已提交版本的“回退”本质是提交一次逆向修改,而不是删除历史记录。因此 SVN 始终保留完整的版本历史。