写代码、改配置、删文件,命令行用多了,总有手一抖的时候。比如刚把一个配置文件改完,保存退出,突然发现改错了地方,想撤回?别慌,命令行也有“后悔药”。
文本编辑器里的撤销
如果你还在编辑文件,比如用了 nano 或 vim,那直接在编辑器里撤销就行。
nano 按 Ctrl+Z 可以挂起,其实也能恢复;vim 里输入 u 就能一步撤销。
:u
但要是已经保存退出,这招就不灵了。
用 git 撤销修改
最常见的情况是改了代码项目里的文件。只要这个项目用 git 管理,撤销就很简单。
想丢掉某个文件的修改,回到上一次提交的状态:
git checkout -- filename.txt
如果用的是较新的 Git 版本,建议写成:
git restore filename.txt
想一次性把所有修改都清空,可以用:
git restore .
这样当前目录下所有改动都会被撤销。
误删文件怎么办
不小心用 rm 删了文件?要是没进回收站(Linux 命令行默认不走回收站),那就得靠备份或者版本控制。
如果文件在 git 仓库里,找回很容易:
git checkout -- deleted-file.txt
或者:
git restore deleted-file.txt
如果根本没用 git,那只能看系统有没有自动备份,或者用数据恢复工具,但成功率不高。所以重要文件,最好早点纳入版本管理。
用 cp 和 mv 备份习惯救场
有些老手改配置前会先备份:
cp nginx.conf nginx.conf.bak
改坏了?一句话还原:
mv nginx.conf.bak nginx.conf
这种土办法,关键时刻特别管用。
shell 历史记录不是撤销
有人以为按上下箭头找回命令就是“撤销”,其实那只是重新执行,搞错一步可能雪上加霜。真正的撤销是让系统状态回到之前的样子,不是再跑一遍命令。
小技巧:养成检查习惯
改文件前先 ls 看看,改完用 cat 或 diff 对比一下:
diff config.old config.new
或者看看 git 状态:
git status
这些动作多练几遍,慢慢就成了本能,少走很多回头路。
命令行不怕犯错,怕的是没有退路。掌握这几个撤销方法,干活才敢放开手脚。