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

8044

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


102
这个互动的 git 命令速查表 http://www.ndpsoftware.com/git-cheatsheet.html 展示了 git 工作区(使用 "workspace" 而非 "working copy" 可以获得更好的谷歌搜索结果)。 - qneill
36
注意:如果您只想删除部分未跟踪的文件,而不是全部git clean现在有一个交互模式!请参见我对另一个问题的答案:git 1.8.4+ - VonC
在发布新答案之前,请考虑该问题已经有25个以上的答案。确保你的答案提供了现有答案中没有的信息。 - Sazzad Hissain Khan
8
为了让初学者和新手更好理解 Git,可以运行 git status 命令,如果它显示有一个文件未被跟踪,并且你不想将该文件添加到版本库中,你可以直接在文件系统中删除或移动它。这样不会对你的本地仓库或 Git 造成任何损害。你也可以使用 git clean 或以下答案中的某些变体,包括交互式版本,以仅删除选择的文件,但交互模式可能很繁琐。无论你做什么,一定要确保你理解 git clean 将删除哪些内容,或使用 --dry-run 让它告诉你而不会真正执行删除操作。 - LightCC
6
如果这些文件尚未被跟踪,你是否可以在不使用git的情况下删除它们呢?rm files-to-be-deleted - mhatch
Git现在提供交互模式,可以有选择性地删除特定的未跟踪文件,允许您选择要删除哪些文件,同时保留其他文件不受影响。 - Dmitrii Malygin
41个回答

19

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

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

我更喜欢这个方法而不是 'git clean',因为 'git clean' 会删除Git忽略的文件,这样下一次构建就必须重新构建所有内容,您可能还会丢失IDE设置。


3
这样做也会删除对被追踪的文件所做的有效更改。我不建议这样做。 - code_dredd
2
是的,您需要先提交对已跟踪文件的更改。 - JD Brennan

19

git add --allgit stashgit stash drop,按照这个顺序尝试这三个命令以删除所有未跟踪的文件。通过将所有未跟踪的文件添加到 Git 并将它们藏起来,可以将所有未跟踪的文件移动到藏匿列表中,而且删除顶部的那个stash@{0}将从藏匿列表中删除已藏匿的更改。


17

在实际删除文件之前查看将被删除的内容:

git clean -d -n

它会输出类似以下的内容:

将删除 sample.txt

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

git clean -d -f

它会输出类似以下的内容:

正在删除 sample.txt


14

要移除未被跟踪的文件,您应该首先使用命令查看哪些文件将受到清理的影响。

git clean -fdn

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

git clean -fd

13

建议从git文档中移除未跟踪的文件的命令是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,--dry-run

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

5. -q,--quiet

安静模式,仅报告错误,但不报告成功移除的文件。

6. -e,--exclude=

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

7. -x

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

8. -X

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


我认为你打错了一个字,uggested应该是suggested,哈哈只是个建议。 - lacostenycoder

12

git clean -f 可以从工作目录中删除未跟踪的文件。

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


11

使用普通的git clean命令无法删除未跟踪的文件,我的git版本为2.9.0.windows.1

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

9

这也将删除已准备提交的更改,不仅仅包括未跟踪的文件,这可能并非您想要的。 - raspy
不起作用:留下了一些文件。 "git clean -ffdx" 是解决办法。 - Eugene Gr. Philippov

8

删除所有更改: 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 

8

Clean out git repository and all submodules recursively

The following command will clean out the current git repository and all its submodules recursively:

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

一定要非常谨慎地使用这个。 - lacostenycoder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接