【git教程】git clean 命令讲解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


git clean 是 Git 中用于清理工作区的命令,主要用于删除未被 Git 跟踪的文件(即未被添加到版本控制的文件)。这些文件通常是临时文件、编译产物、缓存或误创建的文件。以下是对 git clean 的详细介绍:

一、命令介绍

安全预览模式(推荐先使用)

bash 复制代码
git clean -n
  • 作用:模拟删除操作,显示哪些文件会被删除,不会真正执行删除。

  • 示例输出

    复制代码
    Would remove new_file.txt
    Would remove temp/untracked_folder/

执行删除操作

bash 复制代码
git clean -f
  • 作用:删除所有未跟踪的文件(不包括被忽略的文件)。
  • 注意:此操作不可逆,删除后文件无法恢复!

递归删除文件夹

如果未跟踪的文件包含文件夹,使用:

bash 复制代码
git clean -fd
  • 作用:删除所有未跟踪的文件和文件夹。

包含被忽略的文件(谨慎使用)

如果需要删除.gitignore中指定的被忽略文件,使用:

bash 复制代码
git clean -fx
  • 风险:可能会删除项目运行所需的临时文件(如编译产物、缓存等)。

终极清理(谨慎使用)

bash 复制代码
git clean -fdx
  • 作用:删除所有未跟踪的文件、文件夹,包括被忽略的文件。
  • 场景:彻底重置工作区,仅保留Git已跟踪的文件。

建议工作流

  1. 先使用git clean -n预览要删除的文件。
  2. 确认无误后,使用git clean -fd删除未跟踪的文件和文件夹。
  3. 如果需要包含被忽略的文件,再添加-x参数。

注意 :删除前请确保这些文件确实不需要保留,尤其是使用-x参数时,避免误删重要文件。

二、参数说明

上述 git clean 命令中,参数的缩写及含义如下:

-n

缩写--dry-run
作用 :模拟删除操作,仅显示会被删除的文件,不实际执行删除。
用途:预览清理效果,避免误删。

-f

缩写--force
作用 :强制删除未跟踪的文件。
注意

  • Git 配置中需设置 clean.requireForce = true(默认开启)。
  • 若未使用 -f,命令会报错。

-d

缩写--directory
作用 :递归删除未跟踪的文件夹

该参数不可单独使用否则执行命令报错:
fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; ref using to clean

要与-f组合使用,用于递归删除文件和文件夹

-x

缩写 :无(直接用 -x
作用 :删除被忽略的文件 (即 .gitignore 中指定的文件)。

该参数不可单独使用否则执行命令报错:
fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; ref using to clean

要与-f组合使用,用于删除被忽略的文件

组合参数

  1. -fd

    • 强制删除未跟踪的文件和文件夹(不含被忽略的文件)。
  2. -fx

    • 强制删除未跟踪的文件和被忽略的文件(不含文件夹)。
  3. -fdx

    • 终极清理:强制删除未跟踪的文件、文件夹及被忽略的文件
    • 场景:彻底重置工作区,仅保留 Git 已跟踪的文件。

经验证,组合参数顺序可交换即:
-fd-df效果是一样的
-fx-xf效果是一样的
-fdx-fxd-dfx-dxf-xfd-xdf这几个效果也是一样的

另外,默认设置中-d-x以及-xd不可单独使用,这三个要配合-f使用

总结表格

参数 缩写 作用 风险等级
-n --dry-run 预览删除操作
-f --force 强制删除未跟踪文件
-d --directory 删除未跟踪的文件夹
-x 删除被忽略的文件
-fdx 组合 删除所有未跟踪/被忽略的文件和文件夹 极高

建议 :先使用 git clean -n 预览,再根据需要添加 -f-d-x 参数。

三、自己使用说明

在工作区新建一个文件夹,在文件夹里面新建一个文件,git clean -n 不显示任何文件,表明此时执行 git clean -f不会执行任何操作,如果在工作区直接添加文件,git clean -n 会显示这个文件,表明此时执行git clean -f会删除添加的文件,git clean -f删除的是git clean -n显示的文件,而git clean -f 无法删除在新建的文件夹中新建的文件