关于分支:如何从当前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 取消文件的存储


    推荐阅读

      linux文件常用命令?

      linux文件常用命令?,工作,地址,信息,系统,命令,目录,标准,情况,管理,常用命

      文件夹排序linux命令?

      文件夹排序linux命令?,系统,数字,信息,工作,时间,命令,管理,设备,单位,工具,

      压缩文件夹命令linux?

      压缩文件夹命令linux?,系统,软件,命令,工具,电脑,文件,文件名,格式,选项,目

      linux管理文件的命令?

      linux管理文件的命令?,系统,管理,工作,命令,信息,基础,目录,工具,文件,操作,l

      linux退出文件命令行?

      linux退出文件命令行?,状态,档案,命令,电脑,编辑,文件,模式,界面,指令,键盘,l

      linux删除第一行命令?

      linux删除第一行命令?,单位,系统,命令,标的,不了,数字,连续,名称,档案,文件,m

      linux文件io命令?

      linux文件io命令?,系统,设备,时间,地址,平均,信息,服务,工具,报告,网络,嵌入

      改文件linux命令行?

      改文件linux命令行?,地址,系统,工作,信息,数字,文件,命令,设备,密码,权限,lin

      linux删除本行命令?

      linux删除本行命令?,系统,本行,档案,命令,资料,商业,文件,终端,目录,文件名,L

      拷贝文件夹linux命令?

      拷贝文件夹linux命令?,系统,地址,服务,信息,密码,情况,单位,项目,命令,文件,l

      进入文件夹linux命令?

      进入文件夹linux命令?,系统,密码,终端,目录,标的,一致,传播,图片,环境,工作,l

      d文件比较命令linux?

      d文件比较命令linux?,工作,系统,命令,地址,文件,信息,对比,数字,名称,一致,Li

      linux命令行文件夹?

      linux命令行文件夹?,系统,名称,文件夹,不了,命令,文件,名字,通用,数据,首次,l

      打包文件命令linux?

      打包文件命令linux?,系统,时间,工具,名称,命令,文件,目录,格式,表示,详细信

      linux删除命令文件夹?

      linux删除命令文件夹?,系统,数据,通用,文件夹,命令,文件,环境,百度,不了,名

      linux命令文件授权?

      linux命令文件授权?,系统,工具,权限,文件,档案,数字,软件,信息,时间,电脑,lin

      linux文件io命令?

      linux文件io命令?,系统,设备,时间,地址,平均,信息,服务,工具,报告,网络,嵌入

      linux中文件编辑命令?

      linux中文件编辑命令?,系统,工作,工具,信息,地址,发行,命令,第一,检测,基础,l

      linux文件格式的命令?

      linux文件格式的命令?,设备,命令,系统,文件,标准,代码,情况,电脑,平台,数据,l

      linux删除第一行命令?

      linux删除第一行命令?,单位,系统,命令,标的,不了,数字,连续,名称,档案,文件,m