如何忽略已提交至Git仓库的文件,同时保留其在仓库中的记录?
解决Git保留历史但忽略已追踪文件后续修改的问题
当然可以实现,核心原因是你之前只加了.gitignore,但Git的.gitignore只对未被仓库追踪的文件生效,已经被纳入版本控制的文件,就算写进.gitignore,Git还是会继续监控它的修改。
要达到「保留历史记录,但后续修改不再被Git识别」的需求,你可以用Git的update-index命令来标记这些文件:
具体操作
- 忽略单个文件:
git update-index --assume-unchanged <你的文件路径> - 忽略整个目录下的所有已追踪文件:
git update-index --assume-unchanged $(git ls-files <你的目录路径>)
执行完上面的命令后,Git就会「假装」这些文件没有任何变动,git status不会再显示它们的修改,也无法被暂存和提交,同时仓库里的历史记录完全保留。
恢复追踪的方法
如果之后需要重新让Git监控这些文件的修改,执行:
git update-index --no-assume-unchanged <文件/目录路径>
补充说明
如果你的场景是本地修改和远程分支的文件内容不一致,还可以用--skip-worktree参数,效果类似但更适合这种本地有自定义修改的场景:
git update-index --skip-worktree <文件路径>
恢复的话用--no-skip-worktree即可。
内容的提问来源于stack exchange,提问作者Ero
相关产品推荐
相关产品推荐

