svn revert 可撤销本地未提交修改,恢复文件至上次更新状态;支持单文件(svn revert file)、目录递归(svn revert -r dir)及取消新增/删除操作,但不可逆且不触达服务器。

直接执行 svn revert 命令即可撤销本地未提交的修改,让文件恢复到上次更新(svn update)或检出(svn checkout)时的状态。
确认哪些文件被修改了
运行 svn status 查看工作副本状态。输出中以 M 开头的行表示已修改但未提交的文件,? 表示未受版本控制的文件(revert 不影响这类文件),A 表示新增但未提交的文件(revert 会取消新增操作)。
- 若只改了一个文件,如
config.ini,可精准执行:svn revert config.ini - 若想批量还原当前目录下所有修改,用:
svn revert . --recursive(注意.代表当前目录) - Windows 下路径含空格或中文时,建议用英文引号包裹路径,例如:
svn revert "src/main/java/Util.java"
revert 后文件状态的变化
svn revert 是本地操作,不涉及服务器,也不产生任何提交记录。它会:
- 把已修改文件内容还原为上次 svn update 时的版本
- 把已 add 但未提交的文件标记为“未受控”,并删除其进入版本库的计划(即取消 add)
- 把已 delete 但未提交的文件重新恢复到工作区(相当于撤销删除)
- 对已 merge 但未提交的冲突状态,revert 可清除冲突标记,但不会自动恢复合并前内容——需配合备份或手动处理
误操作后还能补救吗
revert 本身不可逆,一旦执行,本地未提交的修改将永久丢失。所以操作前建议:
- 先用
svn diff 文件名预览具体改动,确认是否真要丢弃 - 对关键文件,可手动复制一份临时备份,比如
cp main.py main.py.bak - 如果已执行 revert 但后悔了,且系统启用了文件历史或回收站(如 Windows 的“以前的版本”、macOS 的 Time Machine),可尝试从中恢复;SVN 本身不保存本地修改快照
替代方案:保留修改但暂时脱离版本控制
不想丢弃修改,又需要干净工作区时,可考虑:
- 用
svn export . /tmp/clean-backup导出当前干净版本(不含 .svn 目录)作参考 - 把修改内容暂存为 patch:
svn diff > my-changes.patch,之后可用patch -p0 重新应用(需确保文件结构未变) - 创建新分支或使用本地 Git(如 git-svn)做临时暂存,适合复杂多点修改场景











