最近在为 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
终于可以正常工作了