Git 如何撤销工作区所有改动(包括新文件)

彻底回到上次提交状态:git restore .(或 git checkout -- .)丢弃已跟踪文件的改动,git clean -fd 删除未跟踪的新文件和目录。两步都要才能完全干净;clean 前先 -n 预览。操作不可逆,谨慎执行。

最佳实践
Git 提交历史与版本恢复示意

分两步:git restore .(旧写法 git checkout -- .)丢弃所有已跟踪文件的修改;git clean -fd 删除所有未跟踪的新文件和目录。两个命令一起才能把仓库彻底还原到最近一次提交的状态。操作不可逆,clean 前先 -n 预览。

完整操作

# 1. 丢弃已跟踪文件的全部修改
git restore .
# 旧写法:git checkout -- .

# 2. 预览将要删除的未跟踪文件(强烈建议先看)
git clean -nd

# 3. 确认后真正删除未跟踪文件和目录
git clean -fd

clean 的常用参数

参数 作用
-n 演习:只列出将删什么,不真删
-f 强制执行(不带会拒绝)
-d 连未跟踪的目录一起删
-x 连 .gitignore 忽略的文件也删(如 build 产物、.env)
-i 交互模式逐个确认
git clean -fdx     # 彻底到"刚克隆"的状态(连 node_modules 都删)

更稳妥的替代:stash

不确定是否真要丢弃?先 stash 存起来,后悔了还能找回:

git stash -u         # 连未跟踪文件一起收

常见问题(FAQ)

Q:clean 删除的文件能找回吗?

不能。未跟踪文件从未进入 Git 对象库,删了就是系统级删除。这是先 -n 预览、或用 stash 替代的原因。

Q:git reset --hard 也能还原,和 restore 有什么区别?

git reset --hard HEAD 同时重置暂存区和工作区到 HEAD(已跟踪文件层面效果相同);但它不动未跟踪文件,仍需配合 clean。restore 语义更聚焦"还原文件"。

Q:连 .env 也想删但它在 .gitignore 里?

git clean -fdx。日常想保留 .env 就别加 -x。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台