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

相关推荐
微尘寒风2 小时前
【Git】的安装和使用
java·git
胖大和尚12 小时前
Git初始化本地文件夹,并推送到远端
git
啵啵啵123412 小时前
Git 底层原理:分支为什么只是一个 41 字节的文件
git
demon755200314 小时前
Git Worktree详解介绍
git·worktree
胖大和尚15 小时前
当前仓库推送到同一台机器上的另一个文件夹
git
轮到我狗叫了2 天前
git - 版本控制工具 - 对应的常见命令 - 以及无需后续每次手动source conda
git
changxiang2 天前
GIT 备忘
git
DogDaoDao2 天前
Windows 开发提效工具全景指南:60+ 工具的工程化分层配置
windows·git·程序员·开发工具·powershell·everything·msys2
wdfk_prog3 天前
GitHub push 失败:如何扫描并清理 Git 历史中的大文件
git·elasticsearch·github
大明二代3 天前
使用 Traefik、cert-manager 和 DNS-01 为内网 Kubernetes 服务配置 HTTPS
git·kubernetes·flux