git clean

描述

默认从当前位置(可以通过path设置路径)通过递归清理未被版本控制(未使用过add或者commit)的文件或者文件夹。
通常只有不被版本控制的文件被删除,若指定-x则可以删除.gitignore忽略的文件。

语法

git clean [-d] [-f] [-i] [-n] [-q] [-e ] [-x|-X] [--]

-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

  1. -n默认仅删除当前目录的文件

  2. -d目标中被.gitignore过滤(e/*,ignore/)

    ​ 未被版本控制的文件和文件夹

  3. -x目标不受.gitignore影响(ignore_file)

    ​ 当前目录中说有文件,不包含文件夹

  4. -dx是-d和-x的并集,扩大版

    不受.gitignore影响

    未被track的文件和文件夹

posted @ 2022-06-25 17:26  flxx  阅读(67)  评论(0编辑  收藏  举报