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

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

根据Git文档git clean

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


第一步是通过使用-n选项来显示将被删除的内容:

 git clean -n 

清洁步骤 – 小心:这将删除文件

 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上的区别。

如果你的configuration中的clean.requireForce设置为“true”(缺省值),那么你需要指定-f否则实际上什么都不会发生。

再次请参阅git-clean文档以获取更多信息。

选项

-F

– 力

如果Gitconfigurationvariablesclean.requireForce没有设置为false,那么git clean将拒绝运行,除非给定-f,-n或-i。

-X

不要使用从.gitignore(每个目录)和$ GIT_DIR / info / exclude读取的标准忽略规则,但是仍然使用-e选项给出的忽略规则。 这允许删除所有未跟踪的文件,包括构build产品。 这可以使用(可能与git reset一起)来创build一个原始的工作目录来testing一个干净的构build。

-X

只删除Git忽略的文件。 这对从头开始重build所有东西可能是有用的,但保留手动创build的文件。

-n

–dry运行

不要真的删除任何东西,只是显示会做什么。

-d

除了未跟踪的文件之外,还要除去未跟踪的目录。 如果未跟踪的目录由不同的Git存储库pipe理,则默认情况下不会被删除。 如果你真的想删除这样一个目录,使用-f选项两次。

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

然后你可以检查你的文件是否真的没有了git status

git-clean – 从工作树中删除未跟踪的文件

我很惊讶之前没有提到这个:

 git clean -i 

这表示交互式 ,您将快速了解将要删除的内容,为您提供包含/排除受影响文件的可能性。 总的来说,比在真正的清洁之前运行强制性的--dry-run还要快。

如果你还想照顾空文件夹,你将不得不在-d折腾。 最后,它使一个很好的别名:

 git iclean 

也就是说,交互式命令的额外手持对于有经验的用户来说可能会很累。 这些天我只使用已经提到的git clean -fd

如果untracked目录是自己的git仓库(例如子模块),则需要使用-f两次:

git clean -d -f -f

我喜欢git stash save -u因为你可以用git stash pop撤销它们。

编辑:另外我find了一个方法来显示未藏匿的文件存储(例如, git show stash@{0}^3https://stackoverflow.com/a/12681856/338986

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

要删除所有未跟踪的文件,最简单的方法是首先添加它们,重置回购如下

 git add --all git reset --hard HEAD 

这是我总是使用的:

 git clean -fdx 

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

git-clean是你正在寻找的。 它用于从工作树中删除未跟踪的文件。

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

 git clean -f {dir_path} 

并结合删除未跟踪的目录/文件和忽略文件的方式。

 git clean -fxd {dir_path} 

在此之后,您将只在git status修改文件。

git clean -fd删除目录

git clean -fX删除被忽略的文件

git clean -fx删除被忽略和未被忽略的文件

可以结合使用以上所有选项

git clean -fdXx

检查git手册获取更多帮助

更好的方法是使用:git clean

 git clean -d -x -f 

这将删除未跟踪的文件,包括git (-x)忽略的目录(-d)和文件。

另外,将-f参数replace为-n以执行dry-run-i交互模式,它会告诉你什么将被删除。

用户交互方式:

 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符合您的需求:

 -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 -fdx 

删除诸如构build输出的无关文件夹

 git clean -fd 

删除多余的文件夹+文件,如build + IDE临时文件

这只会删除被忽略的文件。 如果文件没有被忽略+没有签入,那么它保持。

 git clean -fdX 

新的互动模式

 git clean 

好的,删除不需要的未跟踪的文件和文件夹很容易在命令行中使用git ,只需执行以下操作:

 git clean -fd 

仔细检查 ,因为它会删除文件和文件夹,而没有任何历史logging…

在这种情况下, -f代表强制, -d代表目录…

所以,如果你只想删除文件,你可以只使用-f

 git clean -f 

如果你想删除(目录)和文件,你只能删除未跟踪的目录和文件,如下所示:

 git clean -fd 

另外,你可以使用-x标志来包含被git忽略的文件。 如果你想删除一切,这将是有帮助的。

并添加-i标志,使git要求您在移动中逐一删除文件的权限。

如果您不确定并且想要首先检查事物,请添加-n标志。

如果在成功删除后不想看到任何报告,请使用-q

我也创build下面的图像,使其更容易记忆,特别是我看到很多人混淆-f有时清理文件夹或混淆了某种方式!

删除不需要的未跟踪的文件和文件夹

对于这种情况我只是发明和尝试的一种生活方式(完美地工作):

 git add . git reset --hard HEAD 

谨防! 在执行此操作之前,请确保提交任何所需的更改 (即使在未跟踪的文件中)。

如果您只想删除“git status”未列出的文件,

 git stash save -u git stash drop "stash@{0}" 

我更喜欢这个'git clean',因为'git clean'会删除被git忽略的文件,所以你的下一个版本将不得不重build所有的东西,你也可能会丢失你的IDE设置。

对我而言,只有以下工作:

 git clean -ffdx 

在所有其他情况下,我收到了一些子目录的消息“跳过目录”

有人应该提到:

 git clean [<options>] 

我对吗?

在实际删除之前知道要删除的内容:

git clean -d -n

它会输出如下所示的内容:

将删除sample.txt

要删除上一个命令输出中列出的所有内容:

git clean -d -f

它会输出如下所示的内容:

删除sample.txt

要删除未跟踪的文件,应首先使用命令查看将受到清理影响的文件

 git clean -fdn 

这将显示您将被删除的文件列表。 现在要真正删除这些文件使用此命令:

 git clean -fd 

正常的git clean命令不会使用我的git version 2.9.0.windows.1删除未跟踪的文件。

 $ git clean -fdx # doesn't remove untracked files $ git clean -fdx * # Append star then it works! 

git clean -f to remove untracked files from working directory.

我在我的博客中介绍了一些基础知识, git-intro-basic-commands

uggested 从git docs中删除未跟踪文件的命令是git clean

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

build议的方法:通过使用git clean -i互动模式,以便我们可以控制它。 让看看剩余的可用选项。

可用选项:

 git clean -d -f -i -n -q -e -x -X (can use either) 

说明:

1. -d

除了未跟踪的文件之外,还要除去未跟踪的目录。 如果未跟踪的目录由不同的Git存储库pipe理,则默认情况下不会被删除。 如果你真的想删除这样一个目录,使用-f选项两次。

2. -f,–force

如果Gitconfigurationvariablesclean.requireForce没有设置为false,那么git clean将拒绝运行,除非给定-f,-n或-i。

3. -i, – 交互

以交互方式显示将要完成的操作和清理文件。 有关详情,请参阅“交互模式”。

4. -n, – 继续运行

不要真的删除任何东西,只是显示会做什么。

5. -q, – 安静

保持安静,只报告错误,而不是成功删除的文件。

6. -e,–exclude =

除了在.gitignore(每个目录)和$ GIT_DIR / info / exclude中find的那些外,还可以将这些模式视为有效的忽略规则的集合。

7. -x

不要使用从.gitignore(每个目录)和$ GIT_DIR / info / exclude读取的标准忽略规则,但是仍然使用-e选项给出的忽略规则。 这允许删除所有未跟踪的文件,包括构build产品。 这可以使用(可能与git reset一起)来创build一个原始的工作目录来testing一个干净的构build。

8. -X

只删除Git忽略的文件。 这对从头开始重build所有东西可能是有用的,但保留手动创build的文件。

运行`git clean`命令时要小心。

在运行实际的命令之前总是使用 -n ,因为它会告诉你哪些文件将被删除。

 git clean -n -d git clean -f -d 

默认情况下, git clean只会删除未被忽略的未跟踪文件。 任何匹配.gitignore或其他忽略文件中的模式的文件都不会被删除。 如果你也想删除这些文件,你可以在clean命令中添加一个-x

 git clean -f -d -x 

也有交互模式可用-i与干净的命令

 git clean -x -i 

另外

如果您不能100%确定删除未提交的作品是安全的,则可以使用存储

 git stash --all 

它也将清除你的目录,但给你灵活性,以检索文件在任何时间点使用隐藏 申请stream行 。 然后在稍后的时候,你可以使用

 git stash drop // or clean 

注意:首先导航到目录并签出要清理的分支。

-i交互模式,它会告诉你什么会被删除,你可以从列表中select一个动作。

  1. 只清理文件 [文件夹不会被列出,不会被清除]: $ git clean -i

  2. 清理文件和文件夹$ git clean -d -i

-d包括目录。


如果你从列表中selectc 。 文件/文件夹将被删除,但没有被跟踪,也将删除你搞乱的文件/文件夹。*

例如:如果重新构build远程文件夹并将更改提交到本地计算机。 由其他人创build的文件/文件夹最初将位于过去的文件夹中,并位于您重新构build的新文件夹中。

使用git reset HEAD <file>来取消一个文件

以下命令将清除当前的git存储库和所有子模块:

 (git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f) 

如果您使用zsh bash使用oh-my-zsh ,则可以使用这些很好的别名:

gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'

  • 除了未跟踪的文件之外, gclean 除去未跟踪的目录
  • gpristine硬重置本地更改,删除未跟踪的目录,未跟踪的文件,并且不使用从.gitignore(每个目录)和$ GIT_DIR / info / exclude读取的标准忽略规则,但仍使用-e选项给出的忽略规则。 这允许删除所有未跟踪的文件,包括构build产品。 这可以使用(可能与git reset一起)来创build一个原始的工作目录来testing一个干净的构build