如何从当前 Git 工作树中删除本地(未跟踪)文件

如何从当前工作树中删除未跟踪的本地文件?

答案

根据 Git 文档git clean

从工作树中删除未跟踪的文件


步骤 1 是显示使用-n选项将删除的内容:

# Print out the list of files which will be removed (dry run)
git clean -n

清洁步骤 - 当心:这将删除文件

# Delete the files from the repository
git clean -f
  • 要删除目录,请运行git clean -f -dgit clean -fd
  • 要删除忽略的文件,请运行git clean -f -Xgit clean -fX
  • 要删除被忽略和未被忽略的文件,请运行git clean -f -xgit clean -fx

请注意后面两个命令在X上的大小写差异。

如果在配置clean.requireForce设置为 “true”(默认设置),则需要指定-f否则实际上不会发生任何事情。

再次查看git-clean文档以获取更多信息。


选件

-f--force

如果 Git 配置变量 clean.requireForce 未设置为 false,除非给定-f-n-i ,否则 git clean 将拒绝运行。

-x

不要使用从. gitignore(每个目录)和$GIT_DIR/info/exclude读取的标准忽略规则,但仍要使用-e选项提供的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。可以使用它(可能与 git reset 结合使用)创建原始工作目录以测试干净的构建。

-X

仅删除 Git 忽略的文件。这对于从头开始重建所有内容很有用,但保留手动创建的文件。

-n ,-- --dry-run

实际上不删除任何内容,只是显示将要执行的操作。

-d

除未跟踪的文件外,还删除未跟踪的目录。如果未跟踪的目录由其他 Git 存储库管理,则默认情况下不会将其删除。如果您确实要删除这样的目录,请使用-f选项两次。

使用git clean -f -d确保目录也被删除。

-n, -dry-run

实际上不删除任何内容,只是显示将要执行的操作。

-d

除未跟踪的文件外,还删除未跟踪的目录。如果未跟踪的目录由其他 Git 存储库管理,则默认情况下不会将其删除。如果您确实要删除这样的目录,请使用 - f 选项两次。

然后,您可以检查您的文件是否真的以git status消失了。

令我惊讶的是,之前没有人提到:

git clean -i

这表示交互式 ,您将快速了解要删除的内容,从而可以包含 / 排除受影响的文件。总体而言,仍比真正清洁之前运行强制性--dry-run更快。

如果您还想处理空文件夹,则必须输入-d 。最后,它提供了一个很好的别名:

git iclean

话虽如此,交互命令的额外手握可能会使有经验的用户感到厌烦。这些天我只用已经提到过的git clean -fd

如果未跟踪的目录是它自己的 git 存储库(例如,子模块),则需要使用-f两次:

git clean -d -f -f

删除未跟踪文件的简单方法

要删除所有未跟踪的文件,最简单的方法是先添加所有未跟踪文件,然后按如下所示重置存储库

git add --all
git reset --hard HEAD

我喜欢git stash push -u因为您可以使用git stash pop撤消它们。

编辑:我也找到了一种方法来显示隐藏的未跟踪文件(例如git show stash@{0}^3https://stackoverflow.com/a/12681856/338986

EDIT2:不推荐使用git stash save而推荐使用push 。谢谢 @ script-wolf。

这就是我一直使用的:

git clean -fdx

对于一个非常大的项目,您可能需要运行几次。

git-clean是您想要的。它用于从工作树中删除未跟踪的文件。

如果需要从特定子目录中删除未跟踪的文件,

git clean -f {dir_path}

以及删除未跟踪目录 / 文件和忽略文件的组合方式。

git clean -fxd {dir_path}

之后,您将只能以git status修改文件。