描述
默认从当前位置(可以通过path设置路径)通过递归清理未被版本控制(未使用过add或者commit)的文件或者文件夹。
通常只有不被版本控制的文件被删除,若指定-x则可以删除.gitignore忽略的文件。
语法
git clean [-d] [-f] [-i] [-n] [-q] [-e
-n, –dry-run
不会实际删除任何文件,只是提示哪些文件会被操作。
~/tmp/test_git$ tree
.
├── a
0 directory, 1 files
~/tmp/test_git$ git clean -n
Would remove a
~/tmp/test_git$ git clean -f
Removing a
-f, –force
强制删除
~/tmp/test_git$ tree
.
├── a
├── b
└── c
└── c1
1 directory, 3 files
~/tmp/test_git$ git clean -nf
Would remove b
~/tmp/test_git$ git clean -ndf
Would remove b
Would remove c/
-d
删除未被添加到git路径的文件,.gitignore标记生效
~/tmp/test_git$ tree
.
├── a
├── b
├── c
│ └── c1
└── ignore
2 directories, 3 files
~/tmp/test_git$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
b
c/
nothing added to commit but untracked files present (use "git add" to track)
~/tmp/test_git$ more .gitignore
ignore/*
~/tmp/test_git$ git clean -n
Would remove b
~/tmp/test_git$ git clean -nd
Would remove b
Would remove c/
Would remove ignore/
~/tmp/test_git$ more .gitignore
ignore/
~/tmp/test_git$ git clean -n
Would remove b
~/tmp/test_git$ git clean -nd
Would remove b
Would remove c/
-x
删除没有被track的文件,与是否 被.gitignore操作无关。
~/tmp/test_git$ tree
.
├── a
├── b
├── c
│ └── c1
└── ignore
2 directories, 3 files
~/tmp/test_git$ more .gitignore
ignore/
~/tmp/test_git$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
b
c/
nothing added to commit but untracked files present (use "git add" to track)
~/tmp/test_git$ git clean -nx
Would remove b
~/tmp/test_git$ git clean -ndx
Would remove b
Would remove c/
Would remove ignore/
-q, –quiet
不显示清理过程,或者错误。
看图找不同吧
~/tmp/test_git$ tree
.
├── a
├── b
├── c
│ ├── c1
│ └── c2
├── d
├── e
│ ├── e1
│ └── e2
├── f
├── g
│ └── g1
├── h
├── ignore
└── ignore_file
5 directories, 10 files
~/tmp/test_git$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: d
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: b
Untracked files:
(use "git add <file>..." to include in what will be committed)
c/
f
g/
~/tmp/test_git$ more .gitignore
e/*
ignore/
ignore_file
fl@fl:~/tmp/test_git$ git clean -n
Would remove f
fl@fl:~/tmp/test_git$ git clean -nd
Would remove c/
Would remove f
Would remove g/
Would remove h/
fl@fl:~/tmp/test_git$ git clean -nx
Would remove f
Would remove ignore_file
fl@fl:~/tmp/test_git$ git clean -ndx
Would remove c/
Would remove e/
Would remove f
Would remove g/
Would remove h/
Would remove ignore/
Would remove ignore_file
-
-n默认仅删除当前目录的文件
-
-d目标中被.gitignore过滤(e/*,ignore/)
未被版本控制的文件和文件夹
-
-x目标不受.gitignore影响(ignore_file)
当前目录中说有文件,不包含文件夹
-
-dx是-d和-x的并集,扩大版
不受.gitignore影响
未被track的文件和文件夹