如何从 Git 仓库中删除文件

删除被 Git 跟踪的文件用 git rm <文件>(删除+暂存一步完成),再 git commit。只想停止跟踪但保留本地文件用 git rm --cached。已从历史中彻底清除(如密码)需 git filter-repo 重写历史。

最佳实践
Git 分支协作与合并示意

标准做法:git rm 文件名 然后 git commit。git rm 一步完成"删除文件 + 暂存删除动作";如果只想让 Git 停止跟踪、文件保留在本地(比如误提交的配置文件),用 git rm --cached。

三种删除方式

# 1. 删除文件并停止跟踪(最常用)
git rm old-file.txt
git commit -m "删除 old-file.txt"

# 2. 只停止跟踪,本地文件保留(配合 .gitignore 使用)
git rm --cached config.local.js
git rm -r --cached node_modules/     # 目录递归
git commit -m "停止跟踪本地配置"

# 3. 手工删除后补登记
rm old-file.txt
git add old-file.txt      # 或 git add -A,把删除加进暂存区
git commit -m "删除"

从历史中彻底抹除(密码/密钥泄露场景)

git rm + commit 只在当前版本删除,历史提交里文件还在,任何能克隆仓库的人都能翻出来。彻底清除需要重写历史:

# 推荐工具 git-filter-repo
git filter-repo --path secrets.env --invert-paths

git push --force      # 重写历史后必须强推,所有协作者要重新克隆

注意:强推后其他协作者必须重新克隆或重置本地仓库;已泄露的密钥应当作废轮换,清历史只是缩小暴露面。

常见问题(FAQ)

Q:git rm 报 "has local modifications"?

文件有未提交改动,Git 防误删。确认要删加 -f:git rm -f 文件。

Q:误删了怎么恢复?

还没提交:git restore 文件名;已提交:git restore --source=HEAD~1 文件名 从历史版本捞回。

Q:GitHub 网页上能删文件吗?

能——打开文件右上角菜单选 Delete,会直接产生一个删除提交,适合小文件的快速清理。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台