如何让 Git 停止跟踪已加入 .gitignore 的文件

文件被跟踪后加入 .gitignore 不生效,需先移出索引:git rm --cached <文件>(目录加 -r),提交后 gitignore 规则才接管。本地文件不受影响,只是 Git 不再跟踪其变化。

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

核心动作:git rm --cached <文件> 把它移出 Git 索引(本地文件保留),提交这次"删除"后,.gitignore 的规则才真正生效。 只加 gitignore 不移索引是没用的——Git 对已跟踪文件永远优先看索引。

操作步骤

# 1. 确保 .gitignore 里已有该文件规则
echo "config.local.json" >> .gitignore

# 2. 移出索引(--cached = 不动磁盘文件)
git rm --cached config.local.json
git rm -r --cached build/          # 目录加 -r

# 3. 提交
git commit -m "停止跟踪本地配置文件"
git push

批量处理所有"应忽略却被跟踪"的文件

git rm -r --cached .     # 全部移出索引
git add .                # 按 gitignore 重新添加(被忽略的不会进来)
git commit -m "清理索引,对齐 gitignore"

这条组合在"项目初期忘了配 gitignore、提交了一堆垃圾"后一键治理很好用。

队友侧的效果

他们 pull 后,该文件在他们机器上也会被"停止跟踪"——但本地文件会被删除(对 Git 来说这是一次删除提交)。提醒队友提前备份自己那份本地配置。

常见问题(FAQ)

Q:--cached 会删本地文件吗?

不会。它只操作索引;不加 --cached 的 git rm 才连文件一起删。

Q:历史提交里的旧版本怎么办?

停止跟踪只影响之后。历史里的旧内容仍在仓库中(含敏感信息的话需要用 git filter-repo 重写历史并作废凭据)。

Q:想让 Git 忽略已跟踪文件的本地改动、但不从索引删除?

那是另一个需求:git update-index --skip-worktree <文件>。与 gitignore 场景别混淆。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台