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

git branch git-branch

2041024 观看

30回复

134745 作者的声誉

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

作者: Readonly 的来源 发布者: 2008 年 9 月 14 日

回应 (30)


84

34714 作者的声誉

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

作者: Espo 发布者: 14.09.2008 09:08

391

16982 作者的声誉

8182

0 作者的声誉

决定

根据Git Documentation 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,则git clean将拒绝运行,除非给定-f-n-i

-x

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

-X

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

-n-dry-run

不要删除任何东西,只显示将要做的事情。

-d

除了未跟踪的文件之外,删除未跟踪的目录。如果未跟踪的目录由不同的Git存储库管理,则默认情况下不会删除它。-f如果您确实要删除此类目录,请使用两次选项。

作者: Andreas Ericsson 发布者: 15.09.2008 05:32

890

9406 作者的声誉

用于git clean -f -d确保还删除了目录

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

作者: robert.berger 发布者: 26.05.2009 08:59

221

7372 作者的声誉

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

git clean -d -f -f

作者: Michał Szajbe 发布者: 25.01.2013 12:24

75

3984 作者的声誉

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

git clean -f {dir_path}

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

git clean -fxd {dir_path}

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

作者: Vijay C 发布者: 24.09.2013 06:28

102

2787 作者的声誉

这就是我经常使用的:

git clean -fdx

对于一个非常大的项目,您可能希望运行它几次。

作者: Oscar Fraxedas 发布者: 25.11.2013 02:16

439

10692 作者的声誉

我很惊讶之前没有人提到过:

git clean -i

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

-d如果你还想要处理空文件夹,你将不得不投入一个。最后,它有一个很好的别名:

git iclean

话虽这么说,额外的手持交互式命令可能会让有经验的用户感到厌倦。这些天我只是使用已经提到的git clean -fd

作者: SystematicFrank 发布者: 30.12.2013 08:12

128

4707 作者的声誉

我喜欢git stash push -u因为你可以用它们全部撤消它们git stash pop

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

EDIT2:git stash save不赞成使用push。谢谢@ script-wolf。

作者: hiroshi 发布者: 11.01.2014 12:41

50

934 作者的声誉

git clean -fd 删除目录

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

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

可以将以上所有选项组合使用

git clean -fdXx

检查git手册以获得更多帮助

作者: Pooja 发布者: 22.01.2015 06:33

33

851 作者的声誉

更好的方法是使用:git clean

git clean -d -x -f

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

此外,将-f参数替换-n为执行dry-run-i用于交互模式,它将告诉您将删除的内容。

作者: Chhabilal 发布者: 16.04.2015 06:49

16

5201 作者的声誉

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

作者: Nikita Leonov 发布者: 02.12.2015 05:57

10

749 作者的声誉

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

git clean -d -n

它将输出如下内容:

将删除sample.txt

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

git clean -d -f

它将输出如下内容:

删除sample.txt

作者: Omar Mowafi 发布者: 16.02.2016 08:42

14

903 作者的声誉

我刚刚发明并尝试过这种情况的生活方式(完美无缺):

git add .
git reset --hard HEAD

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

作者: thybzi 发布者: 21.02.2016 05:29

13

524 作者的声誉

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

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

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

作者: jazzdev 发布者: 02.03.2016 02:09

186

5189 作者的声誉

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

要删除所有未跟踪的文件,最简单的方法是先添加所有文件并重置repo,如下所示

git add --all
git reset --hard HEAD

作者: Thanga 发布者: 03.06.2016 12:16

16

595 作者的声誉

对我来说只有工作:

git clean -ffdx

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

作者: rahul286 发布者: 16.08.2016 03:29

5

2461 作者的声誉

普通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!
作者: kujiy 发布者: 11.10.2016 12:14

8

484 作者的声誉

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

git clean -fdn

这将显示将要删除的文件列表。现在要实际删除这些文件使用此命令:

git clean -fd
作者: Gaurav 发布者: 25.10.2016 09:09

1

827 作者的声誉

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

-i 交互模式,它会告诉您将删除的内容,您可以从列表中选择一个操作。

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

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

-d 包括目录。


如果您c从列表中选择。将删除未跟踪的文件/文件夹,并删除您搞砸的文件/文件夹。*

例如:如果重新构建遥控器中的文件夹并将更改提取到本地计算机。最初由其他人创建的文件/文件夹将位于过去的文件夹中以及您重新构建的新文件夹中。

作者: Gnanasekar S 发布者: 16.12.2016 03:05

41

27611 作者的声誉

删除此repo +子模块中的所有额外文件夹和文件

这使您处于与新克隆相同的状态。

git clean -ffdx

删除此仓库中的所有额外文件夹和文件,但不删除其子模块

git clean -fdx

仅删除额外的文件夹但不删除文件(例如构建文件夹)

git clean -fd

删除额外的文件夹+忽略的文件(但不删除任何新添加的文件)

如果文件未被忽略且尚未签入,那么它将保留。注意大写字母X.

git clean -fdX

新的互动模式

git clean
作者: Shital Shah 发布者: 12.02.2017 08:33

5

566 作者的声誉

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

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

作者: ysk 发布者: 16.02.2017 09:05

21

840 作者的声誉

用户互动方式:

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 for interactive
-f for force
-d for directory
-x for ignored files(如果需要,添加

注意: 添加-n--dry-run以检查它将执行的操作。

作者: bit_cracker007 发布者: 02.03.2017 08:09

38

56585 作者的声誉

好的,在命令行中可以轻松删除不需要的未跟踪文件和文件夹git,只需这样做:

git clean -fd

在执行之前仔细检查,因为它将删除文件和文件夹而不创建任何历史记录...

同样在这种情况下,-f代表力并-d代表目录......

因此,如果您只想删除文件,则只能使用-f

git clean -f

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

git clean -fd

此外,您可以使用-xflag来包含git忽略的文件。如果要删除所有内容,这将非常有用。

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

如果您不确定并想先检查一下,请添加-n标记。

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

我还创建了下面的图像,使其更具记忆性,特别是我看到很多人-f有时会混淆清理文件夹或以某种方式混合它!


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

作者: Alireza 发布者: 20.07.2017 04:42

5

8349 作者的声誉

用于从git docs中删除未跟踪文件的 uggested命令是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, - 相互作用

显示将要执行的操作并以交互方式清理文件。有关详细信息,请参阅“交互模式”

4. -n, - 干跑

不要删除任何东西,只显示将要做的事情。

5. -q, - quiet

保持安静,仅报告错误,但不报告成功删除的文件。

6. -e, - exclude =

除了在.gitignore(每个目录)和$ GIT_DIR / info / exclude中找到的那些之外,还要考虑这些模式在有效的忽略规则集中。

7. -x

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

8. -X

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

作者: Silent Spectator 发布者: 01.09.2017 06:23

3

1167 作者的声誉

以递归方式清理git存储库和所有子模块

以下命令将以递归方式清除当前git存储库及其所有子模块:

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)
作者: Sergey 发布者: 25.09.2017 04:25

6

7246 作者的声誉

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

始终 -n在运行实际命令之前使用,因为它将显示将删除哪些文件。

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

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

git clean -f -d -x

-iclean命令还提供了交互模式

git clean -x -i

另外

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

git stash --all

它还将清除您的目录,但允许您使用带有applypop的存储在任何时间点检索文件。然后在稍后您可以使用以下方法清除您的存储:

git stash drop // or clean
作者: DevWL 发布者: 21.10.2017 09:44

3

4079 作者的声誉

带有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一起使用)来创建一个pristine工作目录来测试一个干净的构建
作者: ZenLulz 发布者: 02.11.2017 08:24

5

2070 作者的声誉

我们可以使用下面的git注释轻松地从当前git工作树中删除本地未跟踪文件。

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

例:

git reset --hard HEAD

链接:

  1. https://git-scm.com/docs/git-reset
  2. 如何使用'git reset --hard HEAD'恢复到之前的提交?
  3. 将本地存储库分支重置为远程存储库HEAD
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html
作者: Elangovan 发布者: 04.12.2017 06:30

2

397 作者的声誉

git clean -f

将从当前git中删除未跟踪的文件

git clean -fd

当您要删除目录和文件时,这将仅删除未跟踪的目录和文件

作者: sudhir Vishwakarma 发布者: 18.05.2018 06:04
32x32