如何删除 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 |
常规删除默认需确认;dry-run和交互模式不要求,嵌套仓库另有保护 |
-d |
包含未跟踪目录 |
-x |
连被 .gitignore 忽略的也删 |
-X |
只删被忽略的(保留正常未跟踪文件) |
-i |
交互模式逐个确认 |
实用组合
git clean -fdx # 删除包含忽略项的未跟踪内容,不等于重新clone
git clean -ndX # 预览忽略项;它们也可能是.env等重要本地文件
git clean -i # 拿不准时逐个确认
与 reset 配合的"彻底还原"
git reset --hard && git clean -fdx # 已跟踪+未跟踪全部还原,删除工作区内容;它并不等同于重新克隆,也不会重置本地配置和全部引用
常见问题(FAQ)
Q:误删了能恢复吗?
不能。未跟踪文件不在 Git 对象库,clean 是文件系统级删除。这就是 -n 预览和 -i 交互存在的意义。
Q:为什么 clean 默认拒绝执行?
安全设计。常规执行默认要求-f;-n预览和-i交互例外。不要为省事关闭clean.requireForce保护。
Q:想保留 .env 但清掉其他未跟踪文件?
.env 若在 gitignore 里:用 git clean -fd(不加 x)就不会碰它;不在的话先加进去,或临时移出目录再清理。