踩坑日记:为什么 .gitignore 不起作用了

最近在为 Mathcheap 项目开发一个 Gemini API Key 代理工具,在做项目管理的时候遇到一个问题,之前误将本地的测试数据库提交到了代码中,发现这个问题后,希望通过在.gitignore 中添加了一行

bash 复制代码
# sqlite database
data.sqlite

希望可以让Git忽略掉当前代码中的 data.sqlite 数据库,可是 data.sqlte 依然显示在 "Chnages" 中

这是怎么回事?

解释原因

.gitignore 只会忽略"未被跟踪"的文件;一旦文件已经被 Git 跟踪并提交过,后续改动仍会显示在"Changes"。因为 data.sqlite 文件之前已经被我提交过了,所以仓库中 data.sqlite 已经被跟踪,所以即使在 .gitignore 加了规则,Git 仍会显示它的变更。

通常的做法是通过 git reset --soft HEAD~ 回溯到上次提交的状态,删除被不想被提交的文件, 在更新 .gitignore 就可以了。

但是如果已经提交很久了,回溯也很麻烦,就用下面的命令停止跟踪但保留本地文件:

bash 复制代码
git rm --cached data.sqlite
git commit -m "Stop tracking data.sqlite"

之后 .gitignore 的 data.sqlite 规则就会生效,新变更不会再出现在"Changes"。

检查忽略规则是否生效以及来自哪一条规则:

bash 复制代码
git check-ignore -v data.sqlite
# .gitignore:44:*.sqlite  data.sqlite

.gitignore 终于可以正常工作了

相关推荐
2301_767113989 小时前
点过“不再询问”就要检查:Claude Code权限文件也可能存着密钥
git·信息安全·claude code
这个DBA有点耶10 小时前
数据同步的三个工程底线:DDL同步、断点续传、一致性校验——开源CDC的边界与KFS的路径
数据库·dba·代码规范
这个DBA有点耶13 小时前
MySQL 8.0不可见索引:删索引怕出事,不删又拖慢写入——中间态怎么用?
数据库·mysql·代码规范
miss16 小时前
AI 改完不敢上线?OpenSpec 规约驱动开发实战
前端·代码规范·前端工程化
江屿风16 小时前
【Git-组件】【Git入门:从文档灾难到版本掌控】流食般投喂
运维·笔记·git·组件·版本控制
程序员沉梦听雨16 小时前
【Git】fork工作流与上游同步
git
这个DBA有点耶1 天前
MySQL 8.0直方图:统计信息升级了,执行计划为什么还是选错?
数据库·mysql·代码规范
高调的涵涵4 天前
删了1.2GB,.git仍是1.2GB
git
豆包MarsCode4 天前
用 TRAE 上量化课:从 A 股 CAPM beta 到时变风险,三步找到收益规律
trae
程序员沉梦听雨4 天前
【Git】git-submodule子模块管理
git