关于分支:如何从当前Git工作树中删除本地(未跟踪)文件?

How to remove local (untracked) files from the current Git working tree?

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


根据Git文档Git Clean

Remove untracked files from the working tree

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

1
git clean -n

清除步骤-注意:这将删除文件:

1
git clean -f
  • 要删除目录,请运行git clean -f -dgit clean -fd
  • 要删除忽略的文件,请运行git clean -f -Xgit clean -fX
  • 要删除被忽略和未被忽略的文件,请运行git clean -f -Xgit 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一起消失了。


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

1
git clean -i

这代表交互式,您将快速了解将要删除的内容,从而提供包括/排除受影响文件的可能性。总的来说,还是比实际清洁之前运行强制的--dry-run快。

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

1
git iclean

也就是说,对于有经验的用户来说,额外的交互命令的手持操作可能会让他们感到疲劳。这几天我只使用了前面提到的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 -fdx

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


你要找的是干净的。它用于从工作树中删除未跟踪的文件。


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

1
git clean -f {dir_path}

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

1
git clean -fxd {dir_path}

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


git clean -fd删除目录

git clean -fX删除忽略的文件

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

可结合使用上述所有选项

git clean -fdXx

查看Git手册获取更多帮助


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

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

1
git clean -ffdx

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

1
git clean -fdx

只删除多余的文件夹,但不删除文件(例如,生成文件夹)

1
git clean -fd

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

如果文件未被忽略且尚未签入,则它将保持不变。注意大写x。

1
git clean -fdx

新建交互模式

1
git clean

好的,在命令行中使用git可以很容易地删除不需要的未跟踪文件和文件夹,只需这样做:

1
git clean -fd

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

在这种情况下,-f代表武力,-d代表目录……

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

1
git clean -f

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

1
git clean -fd

此外,还可以使用-x标志来包含git忽略的文件。如果您想删除所有内容,这将很有帮助。

添加-i标志,让git一个接一个地请求您允许删除文件。

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

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

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

deleting unwanted untracked files and folder


更好的方法是使用:git clean

1
git clean -d -x -f

这将删除未跟踪的文件,包括目录(-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


对我来说,只有以下方法有效:

1
git clean -ffdx

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


如果只想删除"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


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

1
git clean -fdn

这将显示将被删除的文件列表。现在要实际删除这些文件,请使用以下命令:

1
git clean -fd

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

在运行实际命令之前,一定要使用-n,因为它将向您显示将删除哪些文件。

1
2
git clean -n -d
git clean -f -d

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

1
git clean -f -d -x

还有交互模式可供使用CLEAN命令的-i

1
git clean -x -i

替代地

如果您不100%确定删除未提交的工作是安全的,您可以使用"存储"代替。

1
git stash --all

它还可以清除您的目录,但是可以灵活地在任何时间点使用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>]

例子:

1
git reset --hard HEAD

链接:

  • 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 &amp;&amp; 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一起)创建一个原始的工作目录来测试一个干净的构建。


    1
    git clean -f

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

    1
    git clean -fd

    当您想删除目录和文件时,这将只删除未跟踪的目录和文件。


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

    -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 取消文件的存储