如何从当前工作树中删除未跟踪的本地文件?
根据Git文档Git Clean
Remove untracked files from the working tree
步骤1是显示使用-n选项将删除的内容:
清除步骤-注意:这将删除文件:
- 要删除目录,请运行git clean -f -d或git clean -fd。
- 要删除忽略的文件,请运行git clean -f -X或git clean -fX。
- 要删除被忽略和未被忽略的文件,请运行git clean -f -X或git clean -fX。
注意后面两个命令在X上的大小写差异。
如果在您的配置中将clean.requireForce设置为"真"(默认),则需要指定-f,否则实际上不会发生任何事情。
有关更多信息,请参阅git-clean文档。
选项
-f, --force
If the Git configuration variable clean.requireForce is not set to
false, git clean will refuse to run unless given -f, -n or -i.
-x
Don’t use the standard ignore rules read from .gitignore (per
directory) and $GIT_DIR/info/exclude, but do still use the ignore
rules given with -e options. This allows removing all untracked files,
including build products. This can be used (possibly in conjunction
with git reset) to create a pristine working directory to test a clean
build.
-X
Remove only files ignored by Git. This may be useful to rebuild
everything from scratch, but keep manually created files.
-n, --dry-run
Don’t actually remove anything, just show what would be done.
-d
Remove untracked directories in addition to untracked files. If an
untracked directory is managed by a different Git repository, it is
not removed by default. Use -f option twice if you really want to
remove such a directory.
使用git clean -f -d确保目录也被删除。
然后,您可以检查您的文件是否真的随git status一起消失了。
我很惊讶之前没人提到过:
这代表交互式,您将快速了解将要删除的内容,从而提供包括/排除受影响文件的可能性。总的来说,还是比实际清洁之前运行强制的--dry-run快。
如果您还想处理空文件夹,则必须放入一个-d。最后,它提供了一个很好的别名:
也就是说,对于有经验的用户来说,额外的交互命令的手持操作可能会让他们感到疲劳。这几天我只使用了前面提到的git clean -fd。
git-clean-从工作树中删除未跟踪的文件
如果未跟踪的目录是它自己的Git存储库(例如子模块),则需要使用-f两次:
git clean -d -f -f
删除未跟踪文件的简单方法
要删除所有未跟踪的文件,方法是先将它们全部添加,然后按如下方式重置回购
1 2
| git add --all
git reset --hard HEAD |
我喜欢git stash push -u,因为你可以用git stash pop把它们全部撤销。
编辑:我还找到了一种在存储中显示未跟踪文件的方法(例如git show stash@{0}^3)https://stackoverflow.com/a/12681856/338986
edit2:git stash save被否决,赞成push。谢谢@script wolf。
这是我一直使用的:
对于一个非常大的项目,您可能需要运行几次。
你要找的是干净的。它用于从工作树中删除未跟踪的文件。
如果需要从特定子目录中删除未跟踪的文件,
以及删除未跟踪目录/文件和忽略文件的组合方式。
1
| git clean -fxd {dir_path} |
在此之后,您只能在git status中修改文件。
git clean -fd删除目录
git clean -fX删除忽略的文件
git clean -fX删除被忽略和未被忽略的文件
可结合使用上述所有选项
git clean -fdXx
查看Git手册获取更多帮助
删除此repo+子模块中的所有额外文件夹和文件
这将使您处于与新克隆相同的状态。
删除此repo中的所有额外文件夹和文件,但不删除其子模块
只删除多余的文件夹,但不删除文件(例如,生成文件夹)
删除额外的文件夹+忽略的文件(但不是任何新添加的文件)
如果文件未被忽略且尚未签入,则它将保持不变。注意大写x。
新建交互模式
好的,在命令行中使用git可以很容易地删除不需要的未跟踪文件和文件夹,只需这样做:
在执行此操作之前请仔细检查,因为它将删除文件和文件夹,而不创建任何历史记录…
在这种情况下,-f代表武力,-d代表目录……
因此,如果只想删除文件,则只能使用-f:
如果要删除(目录)和文件,则只能删除未跟踪的目录和文件,如下所示:
此外,还可以使用-x标志来包含git忽略的文件。如果您想删除所有内容,这将很有帮助。
添加-i标志,让git一个接一个地请求您允许删除文件。
如果您不确定,想先检查一下,请添加-n标志。
如果删除成功后不想看到任何报告,请使用-q。
我还创建了下面的图像,使它更容易记忆,特别是我看到许多人混淆了-f,有时清理文件夹,或以某种方式混淆了它!

更好的方法是使用:git clean
这将删除未跟踪的文件,包括目录(-d)和git (-x)忽略的文件。
另外,将-f参数替换为-n,以执行交互模式的dry-run或-i,它将告诉您将删除什么。
用户交互方法:
1 2 3 4 5 6 7 8 9 10 11
| git clean -i -fd
Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/arsdumpgenerator/s3/ [y/N]? y |
-I代表互动F力-D代表目录-X表示忽略的文件(如果需要,请添加)注意:添加-n或--dry-run来检查它将做什么。
git clean -f -d -x $(git rev-parse --show-cdup)对根目录应用clean,无论您在存储库目录树中的哪个位置调用它。我一直使用它,因为它不会强制您离开您现在工作的文件夹,并允许从您所在的位置清理和提交。
确保标志-f、-d、-x符合您的需要:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| -d
Remove untracked directories in addition to untracked files. If an
untracked directory is managed by a different Git repository, it is
not removed by default. Use -f option twice if you really want to
remove such a directory.
-f, --force
If the Git configuration variable clean.requireForce is not set to
false, git clean will refuse to delete files or directories unless
given -f, -n or -i. Git will refuse to delete directories with .git
sub directory or file unless a second -f is given. This affects
also git submodules where the storage area of the removed submodule
under .git/modules/ is not removed until -f is given twice.
-x
Don't use the standard ignore rules read from .gitignore (per
directory) and $GIT_DIR/info/exclude, but do still use the ignore
rules given with -e options. This allows removing all untracked
files, including build products. This can be used (possibly in
conjunction with git reset) to create a pristine working directory
to test a clean build. |
还有其他标记可用,只需检查git clean --help。
对我来说,只有以下方法有效:
在所有其他情况下,我收到一些子目录的消息"跳过目录"。
如果只想删除"git status"列出的未跟踪文件
1 2
| git stash save -u
git stash drop"stash@{0}" |
我喜欢这个而不是"git clean",因为"git clean"会删除文件被Git忽略,所以您的下一个版本必须重新生成所有内容你也可能会丢失你的IDE设置。
针对这种情况,我发明并尝试了一种生活方式(这种方式非常有效):
1 2
| git add .
git reset --hard HEAD |
当心!在执行此操作之前,请确保提交任何所需的更改(即使是在未跟踪的文件中)。
要知道在实际删除之前将删除哪些内容,请执行以下操作:
git clean -d -n
它将输出如下内容:
将删除sample.txt
要删除上一命令输出中列出的所有内容:
git clean -d -f
它将输出如下内容:
删除sample.txt
要删除未跟踪的文件,应首先使用命令查看受清理影响的文件。
这将显示将被删除的文件列表。现在要实际删除这些文件,请使用以下命令:
运行"git clean"命令时要小心。
在运行实际命令之前,一定要使用-n,因为它将向您显示将删除哪些文件。
1 2
| git clean -n -d
git clean -f -d |
默认情况下,git clean将只删除不被忽略的未跟踪文件。任何与.gitignore或其他ignore文件中的模式匹配的文件都不会被删除。如果您还想删除这些文件,可以向clean命令添加一个-x。
还有交互模式可供使用CLEAN命令的-i。
替代地
如果您不100%确定删除未提交的工作是安全的,您可以使用"存储"代替。
它还可以清除您的目录,但是可以灵活地在任何时间点使用stash with apply或pop来检索文件。稍后,您可以使用以下方法清除您的藏匿物品:
1
| git stash drop // or clean |
git clean -f to remove untracked files from working directory.
我在博客Git Intro Basic命令中介绍了一些基础知识
通过使用下面的git注释,我们可以很容易地从当前的git工作树中删除本地未跟踪的文件。
1
| git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>] |
例子:
链接:
https://git-scm.com/docs/git-reset
如何使用"git reset--hard head"恢复到以前的提交?
将本地存储库分支重置为与远程存储库头相同
https://jwiegley.github.io/git-from-the-bottom-up/3-reset/4-doing-a-hard-reset.html
正常的git clean命令不会用我的git version 2.9.0.windows.1删除未跟踪的文件。
1 2
| $ git clean -fdx # doesn't remove untracked files
$ git clean -fdx * # Append star then it works! |
从git文档中删除未跟踪文件的建议命令是git clean
git clean-从工作树中删除未跟踪的文件
建议方法:使用git clean -i的交互模式所以我们可以控制它。让我们看看剩余的可用选项。
可用选项:
1 2
| git clean
-d -f -i -n -q -e -x -X (can use either) |
说明:
1。-D
删除未跟踪的目录以及未跟踪的文件。如果一个未跟踪的目录由另一个git存储库管理,默认情况下不会删除。如果确实要删除这样的目录,请使用-f选项两次。
2。-F,-力
如果git配置变量clean.requireforce未设置为false,则git clean将拒绝运行,除非给出-f、-n或-Ⅰ
三。-I,——互动
显示将要执行的操作并以交互方式清理文件。详见"互动模式"。
4。-N,-干运行
不要删除任何内容,只需显示将要执行的操作。
5。Q,安静
保持安静,只报告错误,但不报告成功删除的文件。
6。-e,-排除=
除了在.gitignore(每个目录)和$git_dir/info/exclude中找到的模式外,还应考虑这些模式位于一组有效的忽略规则。
7。-X
不要使用从.git ignore(每个目录)和$git_dir/info/exclude读取的标准忽略规则,但仍要使用ignore使用-e选项给出的规则。这允许删除所有未跟踪的文件,包括生成产品。可以使用(可能在结合git reset)创建一个原始的工作目录来测试一个干净的构建。
8。-X
只删除Git忽略的文件。这对于从头开始重建所有内容可能很有用,但保留手动创建的文件。
Clean out git repository and all submodules recursively
The following command will clean out
the current git repository and all its submodules recursively:
1
| (git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f) |
哦,我的zsh和zsh通过git插件提供了这些伟大的别名。它们也可以用于bash。
gclean='git clean -fd'gpristine='git reset --hard && git clean -dfx'
- 除未跟踪的文件外,gclean还删除未跟踪的目录。
- gpristine硬重置本地更改,删除未跟踪的目录,未跟踪的文件,不要使用从.git ignore(每个目录)和$git_dir/info/exclude读取的标准忽略规则,但仍要使用-e选项提供的忽略规则。这允许删除所有未跟踪的文件,包括生成产品。这可以用来(可能与git reset一起)创建一个原始的工作目录来测试一个干净的构建。
将从当前git中删除未跟踪的文件
当您想删除目录和文件时,这将只删除未跟踪的目录和文件。
注意:首先导航到目录并签出要清理的分支。
-i交互模式,它将告诉您将删除什么,您可以从列表中选择一个操作。
仅清理文件[文件夹不会列出也不会清理]:$ git clean -i
清理文件和文件夹:$ git clean -d -i
-d包括目录。
如果您从列表中选择c。将删除未跟踪的文件/文件夹,并删除您弄乱的文件/文件夹。*
例如:如果您重新构造远程文件夹并将更改拉到本地计算机上。最初由其他人创建的文件/文件夹将位于以前的文件夹和重新构造的新文件夹中。
我喜欢使用git stash命令,以后您可以得到隐藏的文件和更改。git clean也是一个不错的选择,但完全取决于您的要求。以下是Git Stash和Git Clean的解释,7.3 Git工具-存储和清洗
I haved failed using most popular answers here - git doesn't delete
untracked files from the repository anyway. No idea why. This is my
super simplified answer without SPECIAL GIT COMMANDS!
任务:从Git存储库中删除未跟踪的文件:
将文件和文件夹暂时从本地项目文件夹移到其他位置
删除.gitignore中关于提交文件和文件夹的所有行
加特。
git commit-m"从未跟踪文件清理存储库"
Git推
已从存储库中删除所有文件和文件夹。
如果需要,可以在本地主机上还原它们:
再次将临时移动到本地项目文件夹的所有文件和文件夹移回
将有关这些文件和文件夹的所有行移回.gitignore
加特。
git commit-m"检查或文件不再出现在git存储库中"
Git推
你完了!
使用git reset HEAD 取消文件的存储