交互模式

git clean 有一个交互模式,它在传递 -ioption 时被激活。
在下面的示例中,我们还使用了 -d 选项,以便对 test_untracked_dir 进行操作。
激活交互模式后,它将显示 What now> 提示。
此提示将要求选择要应用于未跟踪文件的命令。
这些命令是 6.

git clean -di
Would remove the following items:
test_untracked_dir/test_untracked_file
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
What now>

我们将查看下面的每个命令。

  • 命令 6 将解释其他命令。
What now> 6
clean - start cleaning
filter by pattern - exclude items from deletion
select by numbers - select items to be deleted by numbers
ask each - confirm each deletion (like "rm -i")
quit - stop cleaning
help - this screen
? - help for prompt selection
  • 命令 1 将删除提到的项目(item)(item)。
1: clean
  • 选择命令 2 将显示用于过滤未跟踪文件列表的进一步提示。
2: filter by pattern

选择命令 2 后,我们将需要 *_ 文件通配符模式,它将未跟踪文件列表限制为 test_untracked_dir 。

Would remove the following items:
test_untracked_dir/test_untracked_file
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
What now> 2
test_untracked_dir/test_untracked_file
Input ignore patterns>> *_file
test_untracked_dir/
  • 与命令 2 一样,命令 3 用于细化未跟踪的文件名列表。选择此命令将提示输入与未跟踪文件名匹配的数字。
3: select by numbers
  • 命令 4 将对每个未跟踪的文件运行,并显示 Y/N 提示以确认删除。
4: ask each
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help
What now> 4
Remove test_untracked_dir/[y/N]? N
Remove test_untracked_file [y/N]? N
  • 选择命令 5 将退出交互式会话。
5: quit
Git clean

说明

git clean 是一个撤销命令,它完成其他命令,如 git reset 和 git checkout。

但是,与对已添加到 Git 跟踪索引中的文件进行操作的其他命令不同, git clean 命令对未跟踪的文件运行。
未跟踪文件是在工作目录中创建但尚未添加到跟踪索引中的文件。
下面的示例显示了跟踪和未跟踪文件之间的区别:

mkdir test_directory
cd test_directory/
git init .
#Initialized empty Git repository in /Users/kev/code/test_directory/.git/
echo "tracked file" > ./test_tracked_file
git add ./test_tracked_file
echo "untracked" > ./test_untracked_file
mkdir ./test_untracked_dir && touch ./test_untracked_dir/file
git status
#On branch master
#No commits yet
#Changes to be committed:
       # (use "git rm --cached <file>..." to unstage)
                 #new file: test_tracked_file
#Untracked files:
        # (use "git add <file>..." to include in what will be committed) 
                 #test_untracked_dir/
                 #test_untracked_file

作为上述示例的结果,我们将在 test_directory 目录中拥有一个新的 Git 存储库,然后它会创建一个添加到 Git 索引的 test_tracked_file。
此外,还创建了一个 test_untracked_file 和一个 test_untracked_dir。
该示例然后调用 git status ,它显示指向跟踪和未跟踪更改的内部状态的输出。

执行 git clean 命令以显示其预定目标。

此时,我们不应执行 git clean 命令。
下面的示例演示了它可能产生的错误。
最初,Git 被全局配置为需要一个“强制”选项来启动 git clean。
一旦执行,我们将无法撤消 git clean。
当它完全执行时,它会创建一个硬文件系统删除。
在运行之前,我们应该确保确实要删除未跟踪的文件。

git clean
#fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

常用选项和用法

git clean 命令有不同的用法和不同的选项。

-n

-n 选项执行 git clean 的试用。
它显示将要删除的文件,但不会删除它们。

git clean -n
#Would remove test_untracked_file

如我们所见,它表示在执行 git clean 命令时将删除 test_untracked_file。

-f or --force

除非 clean.requireForce 配置选项设置为 false,否则需要 --force 选项。
它从当前目录中删除未跟踪的文件,但未跟踪的文件夹或者使用 .gitignore 指定的文件除外。

git clean -f
#Removing test_untracked_file

输出显示 test_untracked_file 已被删除。
此时git status会显示test_untracked_file已经删除,找不到了。

默认情况下, git clean -f 将对当前目录中的所有未跟踪文件进行操作。
此外,可以使用 -f 选项传递 <path> 值,以删除特定文件。

如果要删除任何未跟踪的目录,可以使用 -d 选项告诉 git clean 这样做,因为默认情况下它会忽略目录。

git clean -f <path>
-d include directories

我们还可以使用 -dn 组合。

git clean -dn
#Would remove test_untracked_dir/
git clean -df
#Removing test_untracked_dir/

它首先输出要删除的 test_untracked_file。
然后我们执行强制清理并接收 test_untracked_dir 被删除的输出。

git clean -x

-x 选项指示 git clean 还包括被忽略的文件。
在最终删除之前,我们最好先执行“试运行”。
-x 选项将作用于所有被忽略的文件。
这可能是意外的东西,比如 ./.idea IDE 配置文件。

git clean -xf

-x 选项可以传递并与其他选项组合。
上面的例子是与 -f 的组合,它将从当前目录中删除未跟踪的文件以及 Git 通常忽略的任何文件。

日期:2020-06-02 22:16:32 来源:oir作者:oir