如何从当前工作树中删除未跟踪的本地文件?
git clean
现在可以使用交互模式!看到我对另一个问题的回答:git 1.8.4+
git clean
在下面的答案中使用或进行一些更改,包括交互式版本仅删除选择性文件,但是交互式模式可能很乏味。无论您做什么,git clean
都要确保了解要删除的内容或用来--dry-run
告诉您的内容而不删除任何内容。
rm files-to-be-deleted
如何从当前工作树中删除未跟踪的本地文件?
git clean
现在可以使用交互模式!看到我对另一个问题的回答:git 1.8.4+
git clean
在下面的答案中使用或进行一些更改,包括交互式版本仅删除选择性文件,但是交互式模式可能很乏味。无论您做什么,git clean
都要确保了解要删除的内容或用来--dry-run
告诉您的内容而不删除任何内容。
rm files-to-be-deleted
Answers:
git- clean-从工作树中删除未跟踪的文件
概要
git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…
描述
从当前目录开始,以递归方式删除不受版本控制的文件,从而清理工作树。
通常,仅删除Git未知的文件,但是如果
-x
指定了该选项,则也会删除忽略的文件。例如,这对于删除所有构建产品很有用。如果
<path>...
给出任何可选参数,则仅影响那些路径。
步骤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 -d
或git clean -fd
git clean -f -X
或git clean -fX
git clean -f -x
或git clean -fx
请注意X
后面两个命令的大小写差异。
如果clean.requireForce
在您的配置中将其设置为“ true”(默认设置),则需要指定,-f
否则实际上不会发生任何事情。
再次查看git-clean
文档以获取更多信息。
选件
-f
,--force
如果Git配置变量clean.requireForce未设置为false,除非给出或
-f
,否则git clean将拒绝运行。-n
-i
-x
不要使用从.gitignore(每个目录)和中读取的标准忽略规则
$GIT_DIR/info/exclude
,但仍要使用带有-e
options 给出的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。可以使用它(可能与git reset结合使用)创建一个原始的工作目录以测试干净的构建。
-X
仅删除Git忽略的文件。这对于从头开始重建所有内容很有用,但保留手动创建的文件。
-n
,--dry-run
实际上不删除任何内容,只是显示将要执行的操作。
-d
除未跟踪的文件外,还删除未跟踪的目录。如果未跟踪的目录由其他Git存储库管理,则默认情况下不会将其删除。
-f
如果您确实要删除这样的目录,请使用两次选项。
git clean -f
仅在被调用的目录(和子目录)中工作。如果要清理整个工作副本,则应在其根目录中调用它。
git clean -f :/
就像您在根仓库目录中运行它一样。另请参阅稍后的答案,也考虑了具有以下内容的子模块git clean -ffxd :/
令我惊讶的是,之前没有人提到过:
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 add --all
的git add .
。所以,你可以在ONELINE较短的方式做到这一点git add . && git reset --hard HEAD
(是非常注意使用这个命令)。
git clean
?
git clean
显然也删除了所有被忽略的内容。它只是删除了我的node_modules
文件夹。这样做将首先暂存除被忽略文件以外的所有文件,然后通过重置将其删除。忽略的文件将不会被触摸。
git clean -n
,然后再进行真正的删除(或使用git clean -i
)。
git clean
仅当您使用-x
或-X
选项时,才会删除被忽略的文件,否则,它只会删除未跟踪的文件。
我喜欢,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。
-u
等价于--include-untracked
。您可以找到有关的帮助git help stash
。
save
不推荐使用该选项,而推荐使用push
,但功能相同,但更多。您可以在这里了解更多信息,https://stackoverflow.com/questions/44680028/whats-the-difference-between-git-stash-save-and-git-stash-push/44681952
这就是我一直使用的:
git clean -fdx
对于一个非常大的项目,您可能需要运行几次。
删除此repo +子模块中的所有其他文件夹和文件
这使您处于与新克隆相同的状态。
git clean -ffdx
删除此存储库中的所有其他文件夹和文件,但不删除其子模块
git clean -fdx
删除多余的文件夹,但不删除文件(例如build或logs文件夹)
git clean -fd
删除多余的文件夹+被忽略的文件(但不删除新添加的文件)
如果文件未被忽略且尚未签入,则它将保留。请注意大写X。
git clean -fdX
新的互动模式
git clean
git clean -fd
删除目录
git clean -fX
删除被忽略的文件
git clean -fx
删除被忽略和未被忽略的文件
可以结合使用以上所有选项
git clean -fdXx
检查git手册以获得更多帮助
git clean -fdXx
产生错误消息“致命:-x和-X不能一起使用”(使用git-2.8)。对于答案中的最后一句话,请提供git手册的链接。干杯
好的,删除不需要的未跟踪文件和文件夹很容易git
在命令行中使用,就像这样:
git clean -fd
在执行此操作之前,请仔细检查,因为它会删除文件和文件夹而不会产生任何历史记录...
同样在这种情况下,-f
代表力和-d
代表目录...
因此,如果只想删除文件,则只能使用-f
:
git clean -f
如果要删除(目录)和文件,则只能删除未跟踪的目录和文件,如下所示:
git clean -fd
另外,您可以使用-x
flag来包含git忽略的文件。如果要删除所有内容,这将很有帮助。
并添加-i
标志,使git询问您是否允许随时删除文件。
如果不确定并想先检查一下,请添加-n
标志。
-q
如果您不想在成功删除后看到任何报告,请使用。
我还创建了下面的图像,使其更令人难忘,尤其是我看到许多人-f
有时会混淆清理文件夹或以某种方式混淆它!
用户互动方式:
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 add .
git reset --hard HEAD
谨防!在执行此操作之前,请确保提交所有必要的更改(即使在未跟踪的文件中)。
git add .
git commit -m 'about to delete'
git reset --hard HEAD~
git add . && git reset --hard HEAD
git add . && git reset --hard
git reset --hard
所有未提交的更改重置,但将未跟踪的文件重置为最新提交的状态。这就是为什么我们首先需要git add .
git clean -f -d -x $(git rev-parse --show-cdup)
不管您在存储库目录树中的何处调用,都会将clean应用于根目录。我一直在使用它,因为它不会强迫您离开您现在使用的文件夹,并且可以从您所在的位置直接进行清理和提交。
确保标志-f
,-d
,-x
满足您的需求:
-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 clean -ffdx
在所有其他情况下,我收到一些子目录的“正在跳过目录”消息。
-x
,只是git clean -ffd
为了避免擦除.gitignore中的文件。
如果您只想删除列出为“ git status”未跟踪的文件
git stash save -u
git stash drop "stash@{0}"
我更喜欢使用“ git clean”,因为“ git clean”将删除git忽略的文件,因此您的下一个构建将必须重新构建所有内容,并且您也可能会丢失IDE设置。
-n
在运行实际命令之前,请始终使用该命令,因为它将显示要删除的文件。
git clean -n -d
git clean -f -d
默认情况下,git clean
将仅删除未被忽略的未跟踪文件。与您的.gitignore或其他忽略文件中的模式匹配的任何文件都不会被删除。如果您也要删除这些文件,则可以-x
在clean命令中添加a 。
git clean -f -d -x
-i
clean命令还提供交互模式
git clean -x -i
如果您不能100%确定删除未提交的工作是安全的,则可以使用隐藏方式
git stash --all
它还会清除您的目录,但是可以让您灵活地使用带有apply或pop的stash随时检索文件。然后,您可以在以后使用以下方法清除存储:
git stash drop // or clean
git stash save and type some comment as to what this stash was for
git clean -f to remove untracked files from working directory.
我已经在我的博客git-intro-basic-commands中介绍了一些基础知识
从git docs删除未跟踪文件的建议命令是git clean
git clean-从工作树中删除未跟踪的文件
建议的方法: 通过使用交互模式,git clean -i
我们可以对其进行控制。让我们看看剩余的可用选项。
可用选项:
git clean
-d -f -i -n -q -e -x -X (can use either)
说明:
1. -d
除未跟踪的文件外,还删除未跟踪的目录。如果未跟踪的目录由其他Git存储库管理,则默认情况下不会将其删除。如果您确实要删除这样的目录,请使用-f选项两次。
2. -f,--force
如果Git配置变量clean.requireForce未设置为false,除非给定-f,-n或-i,否则git clean将拒绝运行。
3. -i,--interactive
显示将要执行的操作并以交互方式清理文件。有关详细信息,请参见“交互模式”。
4. -n,--dry-run
实际上不删除任何内容,只是显示将要执行的操作。
5. -q,--quiet
请保持安静,仅报告错误,而不报告成功删除的文件。
6. -e,--exclude =
除了在.gitignore(每个目录)和$ GIT_DIR / info / exclude中找到的那些模式外,还将这些模式视为有效的忽略规则集中。
7. -x
不要使用从.gitignore(每个目录)和$ GIT_DIR / info / exclude读取的标准忽略规则,但仍要使用-e选项提供的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。可以使用它(可能与git reset结合使用)创建一个原始的工作目录以测试干净的构建。
8. -X
仅删除Git忽略的文件。这对于从头开始重建所有内容很有用,但保留手动创建的文件。
uggested
但这只是“ uggestion
大声笑
我们可以使用下面的git注释轻松地从当前git工作树中删除本地未跟踪的文件。
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
例:
git reset --hard HEAD
友情链接:
git clean -ffdx
解决方案
递归清理git仓库和所有子模块
以下命令将递归清除当前的git存储库及其所有子模块:
(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)
git clean -f
将从当前git中删除未跟踪的文件
git clean -fd
当您要删除目录和文件时,这只会删除未跟踪的目录和文件
带有zsh的oh-my-zsh通过git插件提供了那些出色的别名。它们也可以用于bash中。
gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'
gclean
除了删除未跟踪的文件之外,还删除未跟踪的目录。gpristine
硬重置本地更改,删除未跟踪的目录,未跟踪的文件,并且不使用从.gitignore(每个目录)和$ GIT_DIR / info / exclude读取的标准忽略规则,但仍使用-e选项提供的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。可以使用它(可能与git reset结合使用)创建一个原始的工作目录来测试一个干净的build。bash
。我修改了答案以反映这一点。
我喜欢使用git stash
命令,以后可以保存文件和进行更改。
git clean
也是一个不错的选择,但完全取决于您的要求。这是git stash和git clean的说明,7.3 Git工具-隐藏和清洁