如何提交所有文件并排除.gitignore中指定的文件与目录?
解决Git已追踪文件不受.gitignore约束的问题
这是个很常见的Git小坑——因为.gitignore只对还没被Git追踪的文件起作用,那些已经被你commit过的文件,就算后来加到.gitignore里,Git还是会继续追踪它们。要让后续提交自动排除.gitignore里定义的内容,你需要把这些已追踪的文件从Git索引中移除(本地文件会完整保留,不用担心丢失),具体操作步骤如下:
第一步:确认.gitignore配置正确且已提交
先确保你的.gitignore文件已经包含了所有需要排除的文件/目录规则,并且已经通过git commit提交到仓库(你已经完成这一步,可以跳过确认,但如果规则有问题可以先修改后重新提交)。第二步:移除已追踪但需排除的文件索引
用git rm --cached命令把这些文件从Git的追踪列表里移除,这个命令只会修改Git的索引,不会删除本地文件:- 如果是单个文件:
git rm --cached path/to/your/file - 如果是整个目录:
git rm --cached -r path/to/your/directory - 更高效的方式:一次性移除所有符合
.gitignore规则的已追踪文件,直接运行:
这个命令会自动列出所有当前被Git追踪但匹配git rm --cached $(git ls-files -i --exclude-from=.gitignore).gitignore排除规则的文件,然后批量移除它们的索引记录。
- 如果是单个文件:
第三步:提交索引变更
执行完移除操作后,提交这个变更,告诉Git以后不再追踪这些文件:git commit -m "Stop tracking files listed in .gitignore"第四步:后续提交自动生效
做完以上步骤后,你再执行git add .或者git commit时,Git就会自动忽略.gitignore里定义的文件和目录了——因为这些文件已经不在Git的追踪列表里,同时.gitignore会阻止它们被重新加入索引。
注意事项
- 如果你不小心误移除了某个需要追踪的文件,只需要用
git checkout HEAD -- path/to/file就能从仓库恢复该文件的索引记录。 - 如果有个别文件你想要强制Git追踪(即使在
.gitignore里),可以用git add -f path/to/file命令强制添加,后续Git会继续追踪它。
内容的提问来源于stack exchange,提问作者Dextranovich
相关产品推荐
相关产品推荐

