已经被 git 追踪的文件,简单地把文件名加到 .gitignore 里是无法取消追踪的。
你在 .gitignore 里追加一个文件夹名字,那么这个文件夹下面新建的文件都不会被追踪,但是之前已经被追踪的文件,还是会被 git 追踪。
想要取消追踪,有两个方法,一个简单只是治标,一个复杂但是治本。
简单的就是 git rm xxx ,如果需要记得先备份。这个就是把文件从本地已经 git 仓库中删除,之后你再追加这些文件,.gitignore 就起作用了。但是这些文件依然存在于历史记录中,用 git log 依然能查看到,如果你不慎加入的是个大文件(比如视频)或者敏感文件(比如存了密码),那么这种方法并不适用。因为代码仓库占用的磁盘空间并不会变小,而敏感文件的内容依然可以从 log 中看到。
复杂的就是遍历一遍 commits, 重写每个包含目标文件的 commit ,把该文件从所有 commit 里删除。这种删除比较彻底。如果你之前没有 push 过,那么这种方式使用后,你再 push ,别人不会感觉到你曾经误加过文件。
这个工作推荐你用工具来做:
https://rtyley.github.io/bfg-repo-cleaner/我用的是这个。
如果你更倾向用 git 本身的命令来解决这个问题,也能实现。
如果你误加文件的 commit 是最近提交的,并且数量不多,那么可以用 git rebase -i 手动更改每个有问题的 commit 。事实上,即使有问题的 commit 比较多,只要你有耐心, git rebase -i 理论上也能解决问题。
如果你误加文件的 commit 比较多也比较久远,或者你根本记不得是哪个 commit ,那么可以用 git filter-branch ,具体可以参照这个链接
http://stackoverflow.com/questions/307828/completely-remove-file-from-all-git-repository-commit-history这则问答涵盖了所有可能的方法。