.gitignore 文件相关使用配置
.gitignore
生效但文件仍被追踪的原因与解决办法
📌 原因
.gitignore
只对未被追踪的文件生效。- 如果文件 已经被 Git 追踪(add 过),即使写进
.gitignore
,Git 仍然会继续追踪它的变化。
✅ 解决办法
1. 停止追踪指定文件(保留本地文件)
git rm --cached <file>
git commit -m "stop tracking <file>"
示例:
git rm --cached config.json
git commit -m "stop tracking config.json"
2. 停止追踪整个目录
git rm -r --cached <dir>
git commit -m "stop tracking <dir>"
示例:
git rm -r --cached node_modules
git commit -m "stop tracking node_modules"
3. 设置全局 .gitignore
(忽略所有仓库中的特定文件)
git config --global core.excludesfile ~/.gitignore_global
编辑 ~/.gitignore_global
,写入规则,例如:
.DS_Store
*.log
.idea/
4. 常见 .gitignore
规则写法
-
忽略某个文件
config.json
-
忽略目录
/build/
-
忽略所有
.log
文件*.log
-
强制追踪某个文件(取反规则)
*.log !important.log
📖 总结
.gitignore
不会影响已追踪的文件。- 必须用
git rm --cached <file>
将其从 Git 索引中移除,再提交一次。 - 之后
.gitignore
配置才会真正生效。
.gitignore
中如何强制跟踪某个文件
📌 原因
.gitignore
的规则会忽略匹配的文件/目录。- 但是可以通过 取反规则(前面加
!
)让某些文件即使在忽略规则中,仍然被跟踪。
✅ 解决办法
1. 使用取反 !
规则
例如:忽略所有 .log
文件,但想要保留 important.log
:
*.log
!important.log
这样 important.log
就会继续被 Git 跟踪。
2. 忽略目录但保留其中某个文件
例如:忽略 config/
目录,但保留 config/prod.json
:
config/*
!config/prod.json
3. 文件已经被 .gitignore
忽略,但我想手动跟踪
如果某个文件被 .gitignore
忽略,但你 仍然想强制添加并跟踪,可以用:
git add -f <file>
示例:
git add -f config/dev.json
git commit -m "force add dev.json"
⚠️ 注意:
-f
会强制添加被忽略的文件,适用于一些临时需要提交的情况。
📖 总结
- 用
!
在.gitignore
中取反,可以让被忽略的目录/文件中的某个例外继续跟踪。 - 如果需要临时强制提交被忽略的文件,可以用
git add -f <file>
。