处理变更

删除未跟踪的文件

工作区会攒下一堆 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 自己那份可删除文件清单核验一遍,所以哪怕直接点名,也无法通过这个对话框删掉任何已跟踪的东西。

另请参阅:暂存与丢弃 · 忽略文件 · 把一个文件从历史中移除

在 GitHub 上改进这份翻译