清理未跟踪文件时,你是不是也这样操作:
手动打开文件夹 → 一个一个删除
node_modules、dist、build→ 或者直接用资源管理器全选删除?
太原始了。
Git 早就提供了专门的命令来处理这些未跟踪的文件——git clean。
💡 核心命令速查表
| 命令 | 作用 | 安全级别 |
|---|---|---|
git clean -n |
预览会删除什么(不实际删除) | ✅ 安全 |
git clean -nd |
预览会删除的文件和目录 | ✅ 安全 |
git clean -f |
删除未跟踪的文件 | ⚠️ 需确认 |
git clean -fd |
删除未跟踪的文件和目录 | ⚠️ 需确认 |
git clean -fdx |
彻底清理(包括 .gitignore 中的文件) | 🔴 危险 |
🏗️ 使用流程
1. 预览模式(推荐先执行)
先看会删除什么,不实际删除:
1
2
3
4
5
# 只看会删除哪些文件
git clean -n
# 显示会删除的目录
git clean -nd
典型输出:
1
2
3
Would remove .idea/
Would remove node_modules/
Would remove pre_posts/
证据 > 速度
先预览,再删除。永远不要直接执行
git clean -fd。
2. 执行删除
确认无误后,执行实际删除:
1
2
3
4
5
# 删除未跟踪的文件
git clean -f
# 删除未跟踪的文件和目录
git clean -fd
📋 完整命令详解
预览类命令
| 命令 | 说明 | 使用场景 |
|---|---|---|
git clean -n |
显示会被删除的文件 | 日常清理前检查 |
git clean -nd |
显示会被删除的文件和目录 | 查看目录级清理范围 |
1
2
3
4
# 示例输出
Would remove build/
Would remove temp.log
Would remove .env.local
删除类命令
| 命令 | 说明 | 影响范围 |
|---|---|---|
git clean -f |
强制删除未跟踪的文件 | 仅文件 |
git clean -fd |
强制删除未跟踪的文件和目录 | 文件 + 目录 |
git clean -fdx |
强制删除所有内容(包括 .gitignore) | 全部 |
⚠️ 警告
git clean -fdx会删除 .gitignore 中忽略的文件,包括构建产物、依赖包等。执行后项目可能无法运行,需要重新
npm install或mvn clean install。
🎯 特定目录清理
只清理特定目录
1
2
3
4
5
6
7
8
# 只清理 src/main/java 下的未跟踪文件
git clean -fd ./src/main/java
# 只清理构建产物
git clean -fd ./dist ./build
# 只清理日志文件
git clean -f ./logs/*.log
项目级清理场景
| 场景 | 命令 | 说明 |
|---|---|---|
| 清理构建产物 | git clean -fd dist/ build/ |
删除编译输出 |
| 清理依赖包 | git clean -fd node_modules/ |
删除 npm 包 |
| 清理临时文件 | git clean -fd tmp/ temp/ |
删除临时文件 |
| 保留 .gitignore | git clean -fd |
默认行为 |
| 彻底重置 | git clean -fdx |
包括 .gitignore |
📊 安全使用流程
标准流程
1
2
3
4
5
6
7
8
9
10
11
# 1. 先看状态
git status
# 2. 预览清理范围
git clean -nd
# 3. 确认无误后执行
git clean -fd
# 4. 验证清理结果
git status
完整流程示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 清理前:查看当前状态
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.idea/
node_modules/
pre_posts/
build/
nothing added to commit but untracked files present
# 预览清理
$ git clean -nd
Would remove .idea/
Would remove node_modules/
Would remove pre_posts/
Would remove build/
# 确认无误,执行清理
$ git clean -fd
Removing .idea/
Removing node_modules/
Removing pre_posts/
Removing build/
# 验证结果
$ git status
On branch master
nothing to commit, working tree clean
⚠️ 注意事项
1. 不可恢复
git clean 删除的文件不会进入回收站,无法恢复:
被
git clean删除的文件 = 永久删除不会进入系统回收站
无法用
git reflog恢复只能从备份或其他地方重新获取
2. .gitignore 规则
默认情况下,git clean 不会删除 .gitignore 中的文件:
1
2
3
4
5
6
7
8
9
# .gitignore 内容
node_modules/
dist/
.env
# 执行 git clean -fd 后
# node_modules/ 会被删除(因为是未跟踪的目录)
# dist/ 会被删除(因为是未跟踪的目录)
# .env 不会被删除(因为被 .gitignore 忽略了)
如需删除 .gitignore 中的文件,必须使用 -x 参数:
1
git clean -fdx # 彻底清理
3. 分支和提交
git clean 只影响工作区,不影响 Git 仓库:
| 操作 | 受影响 |
|---|---|
| 已提交的文件 | ❌ 不受影响 |
| 已暂存的文件 | ❌ 不受影响 |
| 未暂存的修改 | ❌ 不受影响 |
| 未跟踪的文件 | ✅ 被删除 |
🔧 实用技巧
1. 保留特定文件
1
2
3
4
5
# 清理但保留 .env 文件
git clean -fd -e .env
# 清理但保留整个目录
git clean -fd -e .idea/ -e .vscode/
2. 组合使用
1
2
3
4
5
6
7
# 清理 + 重置工作区(类似重置项目)
git reset --hard HEAD
git clean -fd
# 彻底重置(包括 .gitignore)
git reset --hard HEAD
git clean -fdx
3. 别名配置
在 ~/.gitconfig 中添加:
1
2
3
4
[alias]
clean-dry = clean -nd # 预览
clean-all = clean -fd # 标准清理
clean-nuke = clean -fdx # 彻底清理
使用方式:
1
2
3
git clean-dry # 预览
git clean-all # 清理
git clean-nuke # 彻底清理
📝 最佳实践清单
执行前确认
- 运行
git status检查当前状态 - 运行
git clean -nd预览删除范围 - 确认没有重要文件在未跟踪列表中
- 确认没有需要保留的临时文件
清理后验证
- 运行
git status确认清理结果 - 检查项目是否能正常运行
- 如有必要,重新安装依赖
🌅 尾声
git clean 是一个强大但危险的命令:
用好了是效率工具,用不好是数据丢失的源头。
正确的使用姿势是:
- 先预览:
git clean -nd - 再确认:检查输出列表
- 后执行:
git clean -fd - 留后路:重要文件先备份或提交
因为最危险的操作,往往是那些不可逆的操作。
📎 附录:快速参考卡片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 安全预览(推荐先执行)
git clean -n # 预览文件
git clean -nd # 预览文件 + 目录
# 标准清理
git clean -f # 删除文件
git clean -fd # 删除文件 + 目录
# 特定目录
git clean -fd ./path # 只清理指定目录
# 保留文件
git clean -fd -e file # 排除特定文件
# 彻底清理(⚠️ 危险)
git clean -fdx # 包括 .gitignore 中的文件