已跟踪文件无法被.gitignore忽略,必须先用git rm --cached从索引移除再添加忽略规则;.gitignore仅对未跟踪文件生效,且规则按项目根目录、子目录、.git/info/exclude优先级覆盖。

Git 无法忽略已跟踪的文件,这是最常被忽略的前提。必须先从索引中移除,再写 .gitignore 规则才生效。
已跟踪文件怎么忽略?用 git rm --cached
如果你已经执行过 git add 或提交过某个文件(比如 config.local.php),它就属于“已跟踪”状态。.gitignore 对它完全无效——Git 会继续报告它的改动,甚至允许你再次 git add 它。
正确做法是:
- 运行
git rm --cached config.local.php,把它从暂存区移出,但保留在工作目录 - 再在
.gitignore中添加config.local.php或对应模式 - 提交这次删除操作:
git commit -m "stop tracking config.local.php"
注意:--cached 是关键参数;漏掉它会直接删掉本地文件。
.gitignore 规则写在哪?优先级怎么算?
Git 会按顺序检查三类忽略源,后加载的规则覆盖先加载的(即更具体的路径优先):
- 项目根目录的
.gitignore(最常用,可提交共享) - 子目录里的
.gitignore(例如frontend/.gitignore只影响该目录及以下) -
.git/info/exclude(仅当前仓库生效,不提交,适合临时或敏感忽略)
例如:根目录 .gitignore 写了 *.log,但 backend/.gitignore 写了 !access.log,那么 backend/access.log 就不会被忽略——子目录规则生效。
生成周报:读取本机 Git 仓库最近一周的提交记录,按项目分类提炼总结,生成标准周报格式,通过微信推送并返回给用户。触发词:周报、weekly report、git总结、提交记录总结、工作周报。
路径开头加斜杠 / 是什么意思?
斜杠决定匹配范围,不加容易误伤:
-
build/→ 忽略所有目录下的build/(如src/build/、test/build/) -
/build/→ 只忽略项目根目录下的build/(src/build/不受影响) -
**/temp→ 忽略任意深度的temp文件或目录(等价于temp加**/前缀)
常见错误:想忽略根目录的 node_modules,却只写 node_modules/,结果 packages/node_modules/ 也被误删——此时应写 /node_modules/ 更精准。
全局忽略配置:用 core.excludesfile
像 .DS_Store、Thumbs.db、编辑器临时文件这类系统或 IDE 生成的文件,在每个项目里重复写很麻烦。推荐设全局忽略:
- 创建文件:
~/.gitignore_global - 设置 Git 配置:
git config --global core.excludesfile ~/.gitignore_global - 往里面加内容,例如:
# macOS .DS_Store # VS Code .vscode/ *.swp
这个配置对所有新克隆或新建的仓库生效,但不影响已存在的 .gitignore 规则——它只是最低优先级的兜底层。
真正容易卡住的地方不是语法,而是忘记检查文件当前是否已被 Git 跟踪。每次加完 .gitignore 规则,先跑一遍 git status --ignored 看效果;如果没出现 “ignored files”,大概率是它已经被 track 了。










