Git:如何批量删除已经从磁盘删除的文件?

文件已在磁盘上删掉、仓库里还在?用 git add -u 一次性暂存所有删除,或 git rm 逐个处理;附 git clean 清未跟踪文件、常见误删补救与 FAQ。

最佳实践
Git:如何批量删除已经从磁盘删除的文件?封面

执行 git add -u(或 git add -A),把所有"磁盘已删但 Git 还跟踪"的文件一次性暂存为删除,然后正常 commit 即可。 -u 只处理已跟踪文件的修改与删除,不会把新文件带进来,最符合这个场景。

1. 场景与解法

手动 rm 了一批文件后,git status 会显示一堆 deleted: xxx(未暂存)。逐个 git rm 太麻烦,批量处理:

git add -u          # 暂存所有已跟踪文件的修改和删除
git status          # 确认暂存区里是要删的文件
git commit -m "remove deleted files"
  • git add -u:只更新已跟踪文件(修改+删除),不碰新文件——批量删文件场景最精准。
  • git add -A:暂存所有变化(含新文件),想连新文件一起提交时用。

2. 如果文件还没从磁盘删

想"连磁盘带仓库一起删"时直接用:

git rm file1.txt dir/file2.txt
# 或按模式
git rm '*.log'

git rm = 磁盘删除 + 暂存删除一步完成。只想从仓库移除但保留磁盘文件(比如误提交的密钥),加 --cached

git rm --cached config/secret.yml

3. 反向场景:清理未跟踪文件

如果问题反过来——磁盘上多了一批不想要的未跟踪文件(编译产物之类):

git clean -n    # 先预览会删什么(强烈建议先跑这步)
git clean -f    # 真正删除
git clean -fd   # 连目录一起

git clean 不可恢复,务必先 -n 预览。

4. 误删了怎么办

git add -u 还没 commit 时:

git restore .           # 或 git checkout -- . 把删除恢复回来

已经 commit 了也能从历史找回:git checkout <上一个提交> -- 路径

常见问题(FAQ)

Q:git add -ugit add -A 到底差在哪?
A:-u 只处理已跟踪文件的修改和删除;-A 还会把新建的未跟踪文件一起暂存。批量删除场景用 -u 更不容易误带新文件。

Q:删除之后仓库体积会变小吗?
A:不会。文件仍存在于 Git 历史里。要彻底从历史抹掉大文件,需要 git filter-repo 或 BFG 这类重写历史的工具。

Q:能用通配符删除一类文件吗?
A:未跟踪文件可以 git rm '*.tmp';如果文件已被磁盘删除,先 git add -u 再 commit 是最省事的。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台