删除未跟踪的文件
工作区会攒下一堆 git 从没为其留过副本的文件:一张随手记的便条、一个 debug-output.txt、一次失败构建留下的 dist/、上个月某个分支遗留的 node_modules。git 为此有一条命令——git clean——而它是唯一一个背后什么都没有的 git 操作。那些内容从未进过任何提交,所以没有 reflog 记录,没有贮藏,没有撤销,也没有任何 git 咒语能把它们请回来。
正因如此,它才是人们在终端里敲下去、然后后悔的那个操作。Gitcito 的版本会在动手之前把整份清单摆出来。
⌘K → 删除未跟踪的文件。

这份清单是什么意思
每一条都是 git clean 能够触及的路径,标注了它在磁盘上的大小,分成两组:
| 分组 | 是什么 | 默认是否选中 |
|---|---|---|
| 未跟踪 | 从未提交过,也没有被 .gitignore 匹配到 |
是 |
| 已忽略 | 被 .gitignore 匹配到——构建产物、缓存、.env |
否 |
这个划分正是重点所在。被忽略的路径通常一文不值,但偶尔会是某样要紧东西的唯一副本:一个本地的 .env、一份数据库导出、一个下载来的测试数据。凡是匹配 .gitignore 的东西,绝不会被替你选中。
一个整体未跟踪的目录只占一行,而不是每个文件一行——tmp/、dist/、node_modules/——因为 git 就是按这个粒度删除它们的,而一份四万个文件的清单是一份没人会读的清单。它的大小是其中所有内容的总和。
标着自成一个仓库的文件夹有它自己的 .git:可能是你丢进这个仓库里的一份克隆,也可能是一个你从没接上线的试验。git 拒绝删除这类东西(它要 -ff,一个 Gitcito 不提供的标志)——废纸篓收得下它们。
丢进废纸篓,还是彻底删除
移到废纸篓默认开启,而且完全不经过 git:那些路径会进入你系统的废纸篓,你可以把它们放回去。这是唯一能删掉嵌套仓库的路子,也是唯一一条勾错了还救得回来的路子。
把它关掉,就是对选中的那些路径执行一次货真价实的 git clean -f -d -x,并且会把数量和总大小摆在你眼前请你确认。那之后什么都救不回来了。
值得知道的限制
- 只针对未跟踪的文件。 一个被修改过的已跟踪文件不在这里——那是丢弃,它会从索引或从 HEAD 把文件还原回去。
- 清单有上限,只列前 400 个路径。如果一个仓库超过这个数,先把列出来的删掉,然后按重新扫描处理剩下的。
- 对于特别大的目录树,目录大小是近似值:扫描在 20,000 个文件之后就停下,所以一个巨大的
node_modules读出来可能比实际偏小。它绝不会读得偏大。 - 扫描是一张快照。 如果对话框开着的时候有构建在写文件,先按重新扫描再删任何东西。
- 在碰任何东西之前,路径都会先对照 git 自己那份可删除文件清单核验一遍,所以哪怕直接点名,也无法通过这个对话框删掉任何已跟踪的东西。
另请参阅:暂存与丢弃 · 忽略文件 · 把一个文件从历史中移除