一、问题背景
当我们使用 git
版本控制系统时,有时候想忽略提交部分文件,我们可以在 .gitignore
文件中添加指定的文件路径或相关规则,.gitignore
文件用于告诉 Git
哪些文件应该被忽略,不纳入版本控制,方便在使用 git add
命令时,自动排除不需要的提交的文件,此时这些文件会被标记为 ignored
状态。
我们有时候会遇到这样一个场景,有一个文件因为历史提交已经被提交进版本控制系统中了,但这个时候我们又希望在 git
中忽略这个文件,因此会在 .gitignore
添加此文件的相关的规则,以期望可以忽略此文件。
但是但我们添加完 .gitignore
规则后,就会发现这个文件的修改依然会被 git
给识别到,然后当使用 git add
命令时,这个文件就会被添加到工作区并等待被提交。这是因为这个文件已经被标记为 tracked
状态,git
会自动跟踪文件的修改。
那么我们如何才能从 git
中移除这个文件,并永久忽略呢?本文将介绍这个情况的解决方法。
二、解决方案
解决此方法的核心思想就是将被忽略的文件从 tracked
状态转变成 ignored
状态:也即先 清除 Git
仓库中的所有缓存信息,再重新添加所有文件,以便重建所有文件系统的状态,命令如下:
# 取消文件跟踪 删除本地Git仓库中的所有缓存信息
git rm -r . --cached
# 添加所有文件
git add .
这里使用 .
将代表所有的文件,有时候在 .gitignore
添加的规则可能会多个匹配,因此使用 git rm -r . --cached
删除所有缓存就会带来很大便利性。
但是如果在大项目中,重建索引缓存可能会耗费大量时间,如果仅是忽略少量文件,则可以删除指定文件的缓存即可,命令如下:
# 取消文件跟踪 删除本地Git仓库中的指定文件
git rm -r $文件的相对路径 --cached
# 添加所有文件
git add .