git clean 是一个用于从工作目录中移除未跟踪文件(untracked files)的命令。它非常有用,特别是在构建项目后清理生成的临时文件、日志或编译产物时。
⚠️ 重要警告:
git clean执行的操作是不可逆的。被删除的文件不会进入回收站,也无法通过git reset恢复。在执行实际删除前,务必先使用"干跑"模式预览。
核心参数说明
| 参数 | 全称 | 作用 |
|---|---|---|
-n |
--dry-run |
显示哪些文件会被删除,但不实际执行删除。强烈建议删除之前执行。 |
-f |
--force |
强制删除。Git 默认要求必须加 -f 才能执行真正的删除操作,以防止误删。 |
-d |
--directories |
同时删除未跟踪的目录。默认情况下 git clean 只删除文件,不删除文件夹。 |
-x |
删除所有未跟踪文件,包括被 .gitignore 忽略的文件。 |
|
-X |
仅删除被 .gitignore 忽略的文件,保留其他未跟踪但未被忽略的文件。 |
常用场景与命令
场景一:预览将要删除的文件
在执行任何清理操作前,先看看会发生什么。
bash
git clean -n
如果包含子目录,建议加上 -d:
bash
git clean -nd
场景二:删除当前目录下所有未跟踪的文件
这是最常用的清理命令,用于移除新建但未 git add 的文件。
bash
git clean -f
场景三:删除未跟踪的文件和目录
当项目中生成了新的文件夹(如构建输出目录 dist/、build/ 等且未被 git 跟踪时),需要加上 -d。
bash
git clean -fd
场景四:彻底清理(包括被 .gitignore 忽略的文件)
如果你修改了 .gitignore 规则,或者想清理掉所有编译生成的、被忽略的临时文件(如 *.o, *.pyc, node_modules/ 等),使用 -x。
bash
预览
git clean -nxd
执行
git clean -fxd
💡 注意:
-x会删除.gitignore中指定的文件,请谨慎使用,确保你不需要这些被忽略的配置或本地依赖。场景五:仅清理被 .gitignore 忽略的文件
如果你想保留新创建但尚未加入版本控制的重要文件,只清理那些本该被忽略的垃圾文件,使用 -X(大写)。
bash
预览
git clean -nXd
执行
git clean -fXd
交互式清理(推荐新手使用)
使用 -i 参数可以进入交互模式,Git 会列出文件并让你逐个选择是否删除。
bash
git clean -i
在交互模式中,你可以输入:
clean:开始清理filter:过滤文件列表select:选择特定文件ask:对每个文件询问quit:退出
实践总结
- 永远先预览:养成习惯,先运行
git clean -nfd确认列表无误。 - 区分
-x和-X:-x(小写):删所有未跟踪的(含 ignore 的)。-X(大写):只删 ignore 的。
- 结合
.gitignore:良好的.gitignore配置可以减少手动清理的需求。 - 替代方案:如果只是想让工作区回到上次 commit 的状态,且不想丢失未跟踪文件,可以考虑
git stash --include-untracked先暂存,再决定如何处理。
常见组合速查表
| 目的 | 命令 |
|---|---|
| 查看将删除什么 | git clean -n |
| 查看将删除什么(含目录) | git clean -nd |
| 删除未跟踪文件 | git clean -f |
| 删除未跟踪文件和目录 | git clean -fd |
| 删除所有未跟踪文件(含 ignore) | git clean -fxd |
| 仅删除被 ignore 的文件 | git clean -fXd |
| 交互式清理 | git clean -i |