git clean

文章目录

  • [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 clean vs git reset 对比)
    • [5.2 必须先加 `-f` 才能执行](#5.2 必须先加 -f 才能执行)
    • [5.3 被 `.gitignore` 忽略的文件默认不会被删除](#5.3 被 .gitignore 忽略的文件默认不会被删除)
    • [5.4 常用别名设置](#5.4 常用别名设置)
  • [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


参考文献

Git - git-clean Documentation

相关推荐
Patrick_Wilson2 小时前
为省一次回归测试,该不该把多个改动堆进一条分支?
git·ci/cd·架构
恋喵大鲤鱼2 小时前
git blame
git·git blame
yeflx2 小时前
Git操作
git
恋喵大鲤鱼2 小时前
git pull
git·git pull
咖啡星人k3 小时前
MonkeyCode 的 Git 集成:AI编程如何与版本控制无缝协作
git·ai编程·monkeycode
恋喵大鲤鱼5 小时前
git remote
git·git remote
恋喵大鲤鱼6 小时前
git cherry-pick
git·git cherry-pick
恋喵大鲤鱼6 小时前
git push
git·git push
stevenzqzq7 小时前
androidstudio 上配置git
git