git check-ignore 回答一个很具体的问题:这个文件到底被哪条忽略规则挡住了?配合 -v,它会直接输出「哪个文件、第几行、哪条规则」,排查 .gitignore 时比反复 git status 猜快得多。
本文把 git check-ignore 的常用参数与 .gitignore 的规则语法一起整理,作为第一轮基础命令的收尾。
关于本系列
本文是《Git 使用教程》按命令拆分的第 28 / 28 篇,全部收录在 Git 栏目。参数表列的是日常高频项,并非穷举;想看某个命令的完整参数,用
git check-ignore -h 看精简列表、git help check-ignore 看完整手册。示例以 Git 2.56.0 为准。一、命令语法
先看语法骨架,再对照下一节的参数表。<占位> 表示必填值,实际输入时不要带尖括号;[...] 表示可选项,-- 用来分隔选项与路径。
bash语法
git check-ignore [<options>] <pathname>...
git check-ignore [<options>] --stdin
二、参数逐项详解
下表按用途列出 git check-ignore 的常用参数,每项都注明了「它到底改变了什么」。
| 参数 | 作用 |
|---|---|
-v / --verbose | 输出「配置文件:行号:规则 路径」,排查首选 |
--no-index | 不查索引,纯粹按忽略规则判断路径(已跟踪文件也能查) |
-n / --non-matching | 把没有被忽略的路径也列出来,配合 -v 看全貌 |
-q / --quiet | 不输出,只用退出码表示是否命中(0 命中 / 1 未命中),适合脚本 |
-z | NUL 分隔输出,处理含空格或换行的文件名 |
--stdin | 从标准输入逐行读路径,批量检查时用 |
-- | 分隔选项与路径 |
.gitignore 规则语法速查
| 写法 | 匹配规则 |
|---|---|
# 注释 | 井号开头为注释行 |
*.log | 任意目录下的 .log 文件 |
/config.php | 只忽略仓库根目录下的 config.php |
build/ | 任意层级的 build 目录,结尾斜杠表示目录 |
doc/*.txt | 单星不跨目录,只匹配 doc 下第一层 |
doc/**/*.pdf | 双星跨任意层级目录 |
temp? / [abc].txt | 问号匹配单字符,方括号匹配字符集合 |
!important.log | 取反,重新纳入被前面规则排除的文件 |
三、常用示例
一份够用的 .gitignore
gitignore一份够用的 .gitignore
# 依赖与构建产物
node_modules/
vendor/
dist/
*.log
# 本地环境文件
.env
.env.local
!.env.example
# 编辑器
.idea/
.vscode/
*.swp
排查「为什么没被忽略 / 为什么被忽略」
bash排查「为什么没被忽略 / 为什么被忽略」
git check-ignore -v dist/app.js
# .gitignore:3:dist/ dist/app.js
git check-ignore -vn src/app.js
git status --ignored -s | head -20
批量检查与脚本用法
bash批量检查与脚本用法
git ls-files -o --exclude-standard | git check-ignore -v --stdin
if git check-ignore -q build/app.js; then echo "被忽略"; fi
四、注意事项
.gitignore 只对未跟踪文件生效
文件已经被提交过,再加忽略规则也不会让它从仓库里消失。正确做法是
git rm --cached <file> → 提交 → 之后规则才生效。注意这会让其它协作者下次 pull 时本地副本被删除,涉及共享配置要先沟通。规则来源不止 .gitignore: 还有仓库的
.git/info/exclude 和全局 core.excludesFile。git check-ignore -v 会把具体文件和行号打出来,一眼就能看出是哪一层生效。五、小结
把 git check-ignore -v 当作忽略规则的「调试器」,把 --no-index 和 -n 当作两个补充视角,再记住「已跟踪文件不受 ignore 影响」这条边界,.gitignore 就不再是玄学。到这里第一轮的基础命令就全部过完了。
本系列共 28 篇,一个命令一篇,完整目录见 Git 栏目。本系列第一轮完结,第二轮将进入 rebase -i、cherry-pick、bisect、worktree 等进阶命令。