一、问题背景

当我们使用 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 .
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐