假设一个 Git 仓库中有个 a 目录,这个 a 目录原来已经被提交到仓库,后来因某种原因,希望从仓库中排除,即希望 Git 不再跟踪 a 目录的变化。那么只把 a 目录添加到 .gitignore 文件是不起作用的,还需执行以下两个关键步骤:
第一步:从 Git 版本控制中移除 a 目录(但保留本地文件)
由于 a 目录之前已经被 Git 跟踪,即使现在添加到 .gitignore,Git 仍会继续跟踪它的变化。必须先将它从 Git 的索引(暂存区)中删除。
打开终端,进入仓库根目录,执行:
git rm -r --cached a
- -r:递归删除目录及其内容。
- --cached:只从 Git 索引中移除,保留本地工作区的文件。
第二步:提交更改
将这次修改提交到仓库:
git commit -m "停止跟踪 a 目录,并将其加入 .gitignore"
重要说明
这个操作不会删除你本地工作区中的 a 目录及其文件,只会让 Git 不再跟踪它。
如果其他人拉取了这次提交,他们的本地仓库中的 a 目录不会被自动删除,但后续任何修改都不会被 Git 识别。如果他们也需要彻底停止跟踪,可以在自己的仓库中执行相同的 git rm --cached 命令。
历史提交中依然保留着 a 目录的所有版本记录,这是正常的,因为 Git 不会重写历史。
从此以后,对 a 目录的任何新增、修改、删除,Git 都会忽略(不会显示在 git status 中,也不会被提交)。
在 .gitignore 文件中添加 a 目录的常见写法有:
- a/ #仅匹配名为 a 的目录(推荐)
- a #匹配任何名为 a 的文件或目录
建议使用 a/ 明确只匹配目录。