SVN 版本回退(九)

9.版本回退

一、撤销未提交的修改

svn revert

适用场景:修改了文件但尚未提交,想放弃所有本地改动,恢复到上次更新时的状态。

1. 撤销单个文件

# 查看状态(M 表示已修改)
svn status
M       readme

# 撤销修改
svn revert readme
Reverted 'readme'

# 再次查看状态(无改动)
svn status

2. 撤销整个目录(递归)

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 始终保留完整的版本历史。