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


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


5796
2017-09-14 09:06


起源


这个互动的git备忘单 ndpsoftware.com/git-cheatsheet.html 显示git工作区(谷歌为您提供“工作区”比“工作副本”更好的结果)。 - qneill
注意:如果您只想删除 一些 未跟踪的文件,但是 不是所有的人, git clean 现在有了 互动 模式!看到 我对这个问题的回答:git 1.8.4+ - VonC
请注意,您不是从git分支中删除文件,因为分支是对提交的引用,因此不包含未跟踪的文件。这些只存在于工作目录中,与分支无关。这可能只是术语澄清。 - Pavel Šimerda
在您发布新答案之前,请考虑此问题已有25个以上的答案。确保您的答案有助于现有答案中的答案 - Sazzad Hissain Khan
为了澄清对未经授权的人和Git的新用户的理解 - 运行git状态,如果它显示一个未跟踪的文件,并且你不想在repo中使用该文件,你可以直接进入你的文件系统并删除或移动它。这对您当地的回购或Git没有任何不利影响。你也可以使用 git clean 或者下面答案中的一些变化,包括仅删除选择性文件的交互式版本,但交互模式可能很乏味。无论你做什么,一定要明白什么 git clean 将删除或使用 --dry-run 让它告诉你没有删除任何东西。 - LightCC


答案:


根据Git文档 git干净

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


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

git clean -n

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

git clean -f
  • 要删除目录,请运行 git clean -f -d 要么 git clean -fd
  • 要删除被忽略的文件,请运行 git clean -f -X 要么 git clean -fX
  • 要删除已忽略和未忽略的文件,请运行 git clean -f -x 要么 git clean -fx

注意 案件的区别 X 对于后两个命令。

如果 clean.requireForce 在配置中设置为“true”(默认值),需要指定 -f 否则什么都不会发生。

再看看 git-clean docs以获取更多信息。

选项

-F

- 力

如果Git配置变量clean.requireForce未设置为false,则除非给定-f,-n或-i,否则git clean将拒绝运行。

-X

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

-X

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

-n

--dry运行

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

-d

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


7613
2018-05-26 20:59



git clean -f 仅适用于调用它的目录(和子目录)。如果要清理整个工作副本,则应在其根目录中调用它。 - Eduardo Bezerra
它还删除.gitignore中的所有文件。我只需要删除新文件/文件夹,而不是.gitignore - Kostanos
@Kostanos如果您不想删除.gitignore中的文件,请不要提供-x标志。 - Lo-Tan
git clean -f :/ 就像你在root repo dir中运行它一样工作。另见后面的答案也考虑了子模块 git clean -ffxd :/ - here
@Michelle git clean -xfd还将删除当前在你的.gitignore中忽略的所有文件,它们不可恢复 - thedanotto


使用 git clean -f -d 确保这一点 目录 也被删除。

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


817
2017-12-30 20:12



如前所述,干好运行 git clean -n -d - Ms01
同样的事情是做的 git clean -nd 和 git clean -fd。 - Micer


我很惊讶之前没有人提到这件事:

git clean -i

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

你将不得不折腾 -d 如果你还想照顾空文件夹。最后,它有一个很好的别名:

git iclean

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


397
2017-09-14 09:09



得到:错误:未知开关`i' - pal4life
@ pal4life它是在1.8.4中添加的,你可能正在运行旧版本的git? github.com/git/git/blob/master/Documentation/RelNotes/1.8.4.txt - Mattias Backman
@SystematicFrank,不要使用别名,它们实际上不超过1人.... - Pacerier


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


387
2018-01-25 12:24





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

git clean -d -f -f


200
2018-06-03 12:16



顺便说一下,这是写的 文件 :Git将拒绝删除.git子目录或文件的目录,除非给出第二个-f。但无论如何,谢谢! - Maxim Suslov


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

要删除所有未跟踪的文件,简单   方式是 首先添加所有这些 和 重置回购如下

git add --all
git reset --hard HEAD


145
2018-01-11 00:41



你可以替换 git add --all 通过 git add .。所以你可以在oneline上以较短的方式完成 git add . && git reset --hard HEAD  (是 非常小心这个命令)。 - RousseauAlexandre
为什么要使用它 git clean? - user2864740
因为 git clean 显然也删除了被忽略的一切。它刚刚删除了我的 node_modules 夹。执行此操作将首先暂存除被忽略的文件之外的所有文件,然后通过执行重置来删除它们。忽略忽略的文件。 - Andreas
@Andreas它不会为我删除被忽略的文件(git 2.14.1)。 你应该跑 git clean -n 无论如何,在进行真正的删除之前(或使用 git clean -i)。 - Qw3ry
git clean 仅当您使用时才删除被忽略的文件 -x 要么 -X 选项,否则它只删除未跟踪的文件。 - doubleDown


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

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


118
2017-11-25 14:16



你能在藏匿处解释-u吗?我不遵循git stash save的不同之处。我尝试了这个并且它有效。看了git docs,也找不到它。 - Winnemucca
-u 相当于 --include-untracked。你可以找到帮助 git help stash。 - hiroshi
@hiroshi谢谢!在尝试了来自十几个不同的人的每一个解决方案后,这是最终工作的那个...哇!即使是一个git stash也是虚无...拯救 - 你照顾得无人问津。重置硬/清洁力/等这些都没有为我做任何事情。 - killjoy