文章目录
- [1. 简介](#1. 简介)
- [2. 格式](#2. 格式)
- [3. 选项](#3. 选项)
- [4. 示例](#4. 示例)
-
- [4.1 预览将要删除的文件(推荐)](#4.1 预览将要删除的文件(推荐))
- [4.2 删除未跟踪的文件](#4.2 删除未跟踪的文件)
- [4.3 删除被 `.gitignore` 忽略的文件](#4.3 删除被
.gitignore忽略的文件) - [4.4 交互式删除](#4.4 交互式删除)
- [4.5 排除特定文件](#4.5 排除特定文件)
- [5. 注意](#5. 注意)
-
- [5.1 `git clean` vs `git reset` 对比](#5.1
git cleanvsgit reset对比) - [5.2 必须先加 `-f` 才能执行](#5.2 必须先加
-f才能执行) - [5.3 被 `.gitignore` 忽略的文件默认不会被删除](#5.3 被
.gitignore忽略的文件默认不会被删除) - [5.4 常用别名设置](#5.4 常用别名设置)
- [5.1 `git clean` vs `git reset` 对比](#5.1
- [6. 小结](#6. 小结)
- 参考文献
1. 简介
git clean 用于删除工作区中未被 Git 跟踪的文件和目录。这些文件通常是编译产物、临时文件或 IDE 生成的文件。
典型场景:
- 清理编译生成的
.o、.exe等文件 - 删除未跟踪的临时文件或日志
- 恢复到干净的工作区状态
2. 格式
bash
git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] [<pathspec>...]
注意,未指定<pathspec>默认为当前目录。
3. 选项
bash
-d
递归删除目录(包括空目录)
-e, --exclude=<pattern>
排除符合指定模式的文件(即使匹配 -x)
-f, --force
强制执行(Git 要求必须使用 -f 才能删除,防止误删)
-i, --interactive
交互式模式,逐个确认删除
-n, --dry-run
模拟执行,显示将要删除的文件,但不实际删除(推荐先预览)
-q, --quiet
安静地,只报告错误,但不要报告成功删除的文件。
-x
删除被 `.gitignore` 忽略的文件(默认不会删除)
-X
只删除被 `.gitignore` 忽略的文件(保留未被忽略的文件)
4. 示例
4.1 预览将要删除的文件(推荐)
bash
# 查看哪些未跟踪文件会被删除
git clean -n
# 同时查看未跟踪的目录
git clean -n -d
4.2 删除未跟踪的文件
bash
# 删除所有未跟踪的文件(不删除目录)
git clean -f
# 删除未跟踪的文件和目录
git clean -fd
# 删除未跟踪的文件和目录(包括空目录)
git clean -fd
4.3 删除被 .gitignore 忽略的文件
bash
# 同时删除未跟踪文件和被忽略的文件
git clean -fx
# 只删除被忽略的文件(保留未被忽略的未跟踪文件)
git clean -fX
4.4 交互式删除
bash
# 逐个确认删除
git clean -i
4.5 排除特定文件
bash
# 删除所有未跟踪文件,但保留 .env 文件
git clean -f -e .env
5. 注意
5.1 git clean vs git reset 对比
| 命令 | 操作对象 | 作用 |
|---|---|---|
git clean |
未跟踪的文件 | 删除未被 Git 跟踪的文件 |
git reset --hard |
已跟踪的文件 | 丢弃已跟踪文件的修改 |
git checkout . |
已跟踪的文件 | 恢复已跟踪文件到最近提交状态 |
完整清理工作区:
bash
# 丢弃所有已跟踪文件的修改
git reset --hard HEAD
# 删除所有未跟踪的文件和目录
git clean -fd
5.2 必须先加 -f 才能执行
bash
# ❌ 错误:Git 拒绝执行
git clean
# error: clean.requireForce true
# ✅ 正确:必须加 -f
git clean -f
可以通过配置关闭此保护(不推荐):
bash
git config --global clean.requireForce false
5.3 被 .gitignore 忽略的文件默认不会被删除
bash
# 默认不会删除被忽略的文件
git clean -f
# 要删除被忽略的文件,必须加 -x
git clean -fx
5.4 常用别名设置
bash
git config --global alias.cleanf "clean -fd"
git config --global alias.cleanx "clean -fdx"
# 使用别名
git cleanf
git cleanx
6. 小结
| 需求 | 命令 | 说明 |
|---|---|---|
| 预览将要删除的文件 | git clean -n |
推荐先执行,避免误删 |
| 删除未跟踪的文件 | git clean -f |
不删除目录 |
| 删除未跟踪的文件和目录 | git clean -fd |
递归删除目录 |
| 同时删除被忽略的文件 | git clean -fdx |
彻底清理(⚠️ 慎用) |
| 只删除被忽略的文件 | git clean -fX |
保留未被忽略的未跟踪文件 |
| 交互式删除 | git clean -i |
逐个确认 |
| 排除特定文件 | git clean -f -e .env |
保留 .env 文件 |
一句话总结 :git clean 删除未跟踪的文件和目录,必须加 -f 才能执行 。删除前务必先用 -n 预览,避免误删重要文件。删除被 .gitignore 忽略的文件需加 -x。