如何删除 Git 工作区中未跟踪的文件
删除未跟踪文件用 git clean:先 git clean -nd 预览,确认后 git clean -fd 删除文件和目录,加 -x 连 .gitignore 忽略的文件一起删。删除不可恢复,-n 预览是必备习惯。
用 git clean:git clean -fd 删除所有未跟踪的文件和目录。先 git clean -nd 预览(dry-run)——删除不可恢复,预览是唯一的保险。加 -x 连 .gitignore 忽略的文件(如 node_modules、.env)也一起删。
操作流程
git clean -nd # 预览:列出将删除什么,不真删
git clean -fd # 确认后执行
参数速查
| 参数 | 作用 |
|---|---|
-n / --dry-run |
预览不执行 |
-f |
强制执行(必须,否则拒绝) |
-d |
包含未跟踪目录 |
-x |
连被 .gitignore 忽略的也删 |
-X |
只删被忽略的(保留正常未跟踪文件) |
-i |
交互模式逐个确认 |
实用组合
git clean -fdx # 回到"刚 clone"的纯净状态(构建前排障常用)
git clean -ndX # 预览"只清理构建产物"会删什么
git clean -i # 拿不准时逐个确认
与 reset 配合的"彻底还原"
git reset --hard && git clean -fdx # 已跟踪+未跟踪全部还原,删除工作区内容;它并不等同于重新克隆,也不会重置本地配置和全部引用
常见问题(FAQ)
Q:误删了能恢复吗?
不能。未跟踪文件不在 Git 对象库,clean 是文件系统级删除。这就是 -n 预览和 -i 交互存在的意义。
Q:为什么 clean 默认拒绝执行?
安全设计。必须显式 -f(或配置 clean.requireForce false 关掉保护,不推荐)。
Q:想保留 .env 但清掉其他未跟踪文件?
.env 若在 gitignore 里:用 git clean -fd(不加 x)就不会碰它;不在的话先加进去,或临时移出目录再清理。