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

时间:2008-09-14 09:06:11

标签: git branch git-branch

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

41 个答案:

答案 0 :(得分:8174)

根据Git文档git clean

  

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


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

git clean -n

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

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,但仍然使用ignore   使用-e选项给出的规则。这允许删除所有未跟踪的文件,   包括构建产品。这可以使用(可能结合使用)   用git reset)创建一个pristine工作目录来测试一个干净的   建立。

     

<强> -X

     

仅删除Git忽略的文件。这可能对重建很有用   从头开始,但保留手动创建的文件。

     

-n, - dr-run

     

实际上不要删除任何内容,只显示将要执行的操作。

     

<强> -d

     

除了未跟踪的文件外,还删除未跟踪的目录。如果   未跟踪的目录由不同的Git存储库管理,它是   默认情况下不会删除。如果你真的想,请使用-f选项两次   删除这样的目录。

答案 1 :(得分:890)

使用git clean -f -d确保同时删除目录

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

答案 2 :(得分:438)

我很惊讶以前没有人提到过这个:

git clean -i

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

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

git iclean

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

答案 3 :(得分:391)

答案 4 :(得分:220)

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

git clean -d -f -f

答案 5 :(得分:184)

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

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

git add --all
git reset --hard HEAD

答案 6 :(得分:128)

我喜欢git stash push -u,因为您可以使用git stash pop撤消所有内容。

编辑:我还找到了一种在藏匿处显示未跟踪文件的方法(例如git show stash@{0}^3https://stackoverflow.com/a/12681856/338986

EDIT2:git stash save已被弃用,转而使用push。谢谢@ script-wolf。

答案 7 :(得分:102)

这就是我经常使用的:

git clean -fdx

对于一个非常大的项目,你可能想要运行它几次。

答案 8 :(得分:84)

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

答案 9 :(得分:75)

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

git clean -f {dir_path}

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

git clean -fxd {dir_path}

之后,您将仅在git status

中修改文件

答案 10 :(得分:50)

git clean -fd删除目录

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

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

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

git clean -fdXx

查看git手册以获取更多帮助

答案 11 :(得分:41)

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

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

git clean -ffdx

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

git clean -fdx

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

git clean -fd

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

如果文件未被忽略且尚未办理登机手续,则会保留。注意大写字母X。

git clean -fdX

新的互动模式

git clean

答案 12 :(得分:38)

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

git clean -fd

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

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

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

git clean -f

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

git clean -fd

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

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

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

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

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


deleting unwanted untracked files and folder

答案 13 :(得分:33)

更好的方法是使用:git clean

git clean -d -x -f

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

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

答案 14 :(得分:21)

用户互动方式:

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 for force
-d表示目录
-x表示忽略的文件(如果需要,可添加)

注意: 添加 -n - 干运行以查看它将执行的操作。

答案 15 :(得分:16)

git clean -f -d -x $(git rev-parse --show-cdup)将clean应用于根目录,无论您在存储库目录树中何处调用它。我一直使用它,因为它不会强迫你离开你现在工作的文件夹,并允许清洁&amp;从你所在的地方开始。

确保标记-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

答案 16 :(得分:16)

对我来说只有工作:

git clean -ffdx

在所有其他情况下,我收到了某些子目录的消息&#34;跳过目录&#34;

答案 17 :(得分:14)

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

git add .
git reset --hard HEAD

小心!确保提交任何所需的更改(即使在未经跟踪的文件中),然后再执行此操作

答案 18 :(得分:13)

如果您只想删除“git status”

未列出的文件
git stash save -u
git stash drop "stash@{0}"

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

答案 19 :(得分:12)

要删除未跟踪的文件:

git add .
git reset --hard HEAD

答案 20 :(得分:10)

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

git clean -d -n

它将输出如下内容:

会删除sample.txt

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

git clean -d -f

它将输出如下内容:

删除sample.txt

答案 21 :(得分:8)

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

git clean -fdn

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

git clean -fd

答案 22 :(得分:6)

git add --allgit stashgit stash drop,请按此顺序尝试这三个命令以删除所有未跟踪的文件。通过将所有这些未跟踪的文件添加到 git 并将它们隐藏起来,会将所有这些未跟踪的文件移到存储列表中,并删除顶部的文件,即 stash@{0} 将从存储列表中删除隐藏的更改。

答案 23 :(得分:6)

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

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

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

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

git clean -f -d -x

还有交互模式-i和clean命令

git clean -x -i

替代地

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

git stash --all

它还会清除您的目录,但您可以使用隐藏 应用弹出,随时灵活地检索文件。然后在以后您可以使用以下方式清除您的存储:

git stash drop // or clean

答案 24 :(得分:5)

普通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!

答案 25 :(得分:5)

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

我在博客git-intro-basic-commands

中介绍了一些基础知识

答案 26 :(得分:5)

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

第3。 -i, - interactive

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

<强> 4。 -n, - dr-run

实际上不要删除任何内容,只显示将要执行的操作。

<强> 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忽略的文件。这可能有助于从头开始重建所有内容,但保留手动创建的文件。

答案 27 :(得分:5)

我们可以使用以下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. How do I use 'git reset --hard HEAD' to revert to a previous commit?
  3. Reset local repository branch to be just like remote repository HEAD
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html

答案 28 :(得分:3)

  

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

     

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

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

答案 29 :(得分:3)

带有 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工作目录来测试一个干净的构建

答案 30 :(得分:2)

git clean -f

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

git clean -fd

如果要删除目录和文件,这将只删除未跟踪的目录和文件

答案 31 :(得分:1)

  

我无法在此处使用最受欢迎的答案-git不会删除   无论如何都无法从存储库中跟踪文件。不知道为什么。这是我的   超级简化的答案,无需特殊的GIT命令!

任务:从git存储库中删除未跟踪的文件:

  1. 将文件和文件夹从本地项目文件夹中的其他位置移动一段时间
  2. 删除.gitignore中有关这些文件和文件夹的所有行以进行提交
  3. 添加。
  4. Git commit -m“从未跟踪的文件中清理存储库”
  5. Git push

所有文件和文件夹已从资源库中删除。

如果需要,可以在本地主机上还原它们:

  1. 再次将临时移动的所有文件和文件夹移回到本地项目文件夹中
  2. 将与这些文件和文件夹有关的所有行移回.gitignore
  3. 添加。
  4. Git commit -m“检查或文件未再次出现在git存储库中”
  5. Git push

您完成了!

答案 32 :(得分:1)

我喜欢使用git stash命令,以后可以获取隐藏文件和更改。 git clean也是不错的选择,但完全取决于您的要求。 这是git stash和git clean的说明,7.3 Git Tools - Stashing and Cleaning

答案 33 :(得分:1)

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

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

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

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

  3. -d包括目录。

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

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

答案 34 :(得分:0)

如果没有其他效果,只需删除以下“ git status”命令列出的所有更改,即可使用以下组合:

git add -A && git commit -m temp && git reset --hard HEAD^

这将首先执行所有更改,然后创建一个临时提交,然后将其丢弃。

答案 35 :(得分:0)

我用这个:

  1. git status
  2. 复制文件的路径
  3. rm <path of file>

我的项目中有许多由巨型ANT构建脚本创建的生成文件。使用git clean会造成混乱。

答案 36 :(得分:0)

这可以使用shell脚本来完成,我使用此scrtipt列出要删除的内容,然后让我确认操作。

这很有用,因为有时我会想清除所有补丁或其他文件,然后再清除所有内容。

test50011@operatorqa2.akeodev.com

答案 37 :(得分:0)

使用git reset HEAD <file>取消暂存文件

答案 38 :(得分:0)

用法:git clean [-d] [-f] [-i] [-n] [-q] [-e] [-x | -X] [-] ...

-q, --quiet           do not print names of files removed
-n, --dry-run         dry run
-f, --force           force
-i, --interactive     interactive cleaning
-d                    remove whole directories
-e, --exclude <pattern>
                      add <pattern> to ignore rules
-x                    remove ignored files, too
-X                    remove only ignored files

答案 39 :(得分:0)

要删除完整的更改,请 git clean -f -d

$ git clean -f -d
Removing client/app/helpers/base64.js
Removing files/
Removing package.json.bak

where 
-f is force 
-d is a directory 

答案 40 :(得分:0)

我认为安全且简单的方法是这样!

git add .
git stash 

了解更多信息 https://www.atlassian.com/git/tutorials/saving-changes/git-stash#stashing-your-work