前言
git clean
用于清除没有加入到git版本库的文件和目录,如果加入到git版本库里的话,我们就无法使用git clean 清除
,必须还原到未跟踪(Untracked)状态才可以进行git clean
清除,在我们进行git管理项目代码的时候,经常会遇到以下场景。
- 在项目中添加了许多测试资源,测试完成后想把它们删了。
- 代码回滚时,有些文件或目录回滚到了未跟踪(Untracked)状态,并需要把它们移除掉。
- 项目开发过程中,临时创建了很多临时文件夹和目录,在项目核心代码加入到暂存区前,需要移除无用文件。
这个时候,通过使用git clean
命令来处理,就会非常容易。
命令介绍
首先,我们打开终端,简单了解一下git clean
的用法
➜ ~ git clean -h
usage: git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>...
-q, --quiet do not print names of files removed
-n, --dry-run dry run
-f, --force force
-i, --interactive interactive cleaning
-d remove whole directories
-e, --exclude <pattern>
add <pattern> to ignore rules
-x remove ignored files, too
-X remove only ignored files
初始化git仓库
# 创建一个测试项目
mkdir myGitTest
# 创建本地仓库
cd myGitTest && git init
ls -a
touch log1.txt
git add .
git commit -m 'log1'
touch log2.txt
git add .
git commit -m 'log2'
mkdir log3
touch log3/log3.txt
git add .
git commit -m 'log3'
mkdir log4
touch log4/log4.txt
git add .
git commit -m 'log4'
查看删除列表
首先,我们在初始化的仓库基础上,进行如下操作
git checkout -b master
# 创建多个文件和目录
touch 1.txt
touch 2.txt
mkdir clean1
touch clean1/c1.txt
使用git status
命令,查看当前分支的情况
➜ myGitTest git:(master) ✗ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
1.txt
2.txt
clean1/
nothing added to commit but untracked files present (use "git add" to track)
文件列表
执行git clean -n
查看哪些未跟踪文件将会被删除。
➜ myGitTest git:(master) ✗ git clean -n
Would remove 1.txt
Would remove 2.txt
继续操作,创建.gitignore
文件,并写入如下内容
touch .gitignore
echo 'log3/' >> .gitignore
echo 'log2.txt' >> .gitignore
echo '1.txt' >> .gitignore
➜ myGitTest git:(master) ✗ git clean -n
Would remove .gitignore
Would remove 2.txt
➜ myGitTest git:(master) ✗ git clean -nx
Would remove .gitignore
Would remove 1.txt
Would remove 2.txt
➜ myGitTest git:(master) ✗ git clean -nX
Would remove 1.txt
通过以上分析,我们可以知道:
git clean -n
可以查看哪些未跟踪文件将会被删除,同时这些文件没有在.gitignore
文件里进行标记。
git clean -nx
查看将会被删除的所有未跟踪文件。
git clean -nX
只展示那些在.gitignore
里标记的文件中,哪些是将要被删除的未跟踪文件。
文件和目录列表
继续操作,执行如下步骤:
➜ myGitTest git:(master) ✗ git clean -nd
Would remove .gitignore
Would remove 2.txt
Would remove clean1/
➜ myGitTest git:(master) ✗ git clean -ndx
Would remove .gitignore
Would remove 1.txt
Would remove 2.txt
Would remove clean1/
➜ myGitTest git:(master) ✗ git clean -ndX
Would remove 1.txt
继续操作,在.gitignore
文件,写入如下内容,并执行后续操作
echo 'clean1/' >> .gitignore
➜ myGitTest git:(master) ✗ git clean -nd
Would remove .gitignore
Would remove 2.txt
➜ myGitTest git:(master) ✗ git clean -ndx
Would remove .gitignore
Would remove 1.txt
Would remove 2.txt
Would remove clean1/
➜ myGitTest git:(master) ✗ git clean -ndX
Would remove 1.txt
Would remove clean1/
继续操作,修改.gitignore
文件clean1/
为clean1/*
,并执行后续操作
➜ myGitTest git:(master) ✗ git clean -nd
Would remove .gitignore
Would remove 2.txt
➜ myGitTest git:(master) ✗ git clean -ndx
Would remove .gitignore
Would remove 1.txt
Would remove 2.txt
Would remove clean1/
➜ myGitTest git:(master) ✗ git clean -ndX
Would remove 1.txt
Would remove clean1/c1.txt
git clean -nd
,可以查看哪些文件和目录将会被删除,同时这些文件和目录没有在.gitignore
文件里进行标记。
git clean -nx
查看将会被删除的所有未跟踪的文件和目录。
git clean -nX
只展示那些在.gitignore
里标记的文件和目录中,哪些是将要被删除的未跟踪文件和目录。
其中,.gitignore
中,如果忽略的文件目录结构是dir/*
时,git clean -ndX
,只删除忽略目录下的所有文件;如果忽略的文件目录结构是dir/
时,git clean -ndX
,删除忽略的目录。
删除文件列表
继续操作,执行如下步骤:
➜ myGitTest git:(master) ✗ git clean -nX
Would remove 1.txt
➜ myGitTest git:(master) ✗ git clean -fX
Removing 1.txt
➜ myGitTest git:(master) ✗ git clean -nX
➜ myGitTest git:(master) ✗ git clean -ndX
Would remove clean1/c1.txt
➜ myGitTest git:(master) ✗ git clean -fdX
Removing clean1/c1.txt
➜ myGitTest git:(master) ✗ git clean -ndX
➜ myGitTest git:(master) ✗ git clean -nx
Would remove .gitignore
Would remove 2.txt
➜ myGitTest git:(master) ✗ git clean -n
Would remove .gitignore
Would remove 2.txt
➜ myGitTest git:(master) ✗ git clean -fx
Removing .gitignore
Removing 2.txt
➜ myGitTest git:(master) git clean -n
➜ myGitTest git:(master) git clean -nx
-
git clean -f
删除.gitignore
里未标记的文件 -
git clean -fx
删除所有未跟踪的文件 -
git clean -fX
只删除.gitignore
里标记的文件 -
git clean -fd
删除.gitignore
里未标记文件和目录 -
git clean -fdX
删除所有未跟踪的的文件和目录 -
git clean -fdX
删除.gitignore
里标记的文件和目录
注意事项
当执行git clean
后,文件就删除了,并且找不回,所以一定要慎用
小结
git clean
在开发中应该充分应用。因此请牢记以下几个组合参数:
-n,显示哪些文件会被删除,如果文件是.gitignore
里标记的文件,则忽略。
-d,查找目录。
-f,删除文件。
-x,查找未跟踪(Untracked)所有文件
-X,仅查找.gitignore
里标记的未跟踪(Untracked)文件
- 查看删除列表
git clean -n
组合 - 删除列表
git clean -f
组合
读后有收获可以支付宝请作者喝咖啡:
创作不易,未经授权禁止转载和授课!