已提交过的文件夹,如何从 GitHub 中删除
2026-09-29 07:27 AlfredZhao 阅读(174) 评论(0) 收藏 举报项目里的 scripts/ 文件夹不想提交到 GitHub,但历史提交里已经有了。直接在 .gitignore 里写 scripts/ 并不能解决问题,因为这些文件已经被 Git 追踪过,忽略规则对它们不生效。正确的做法是先把它们从 Git 的追踪中移除,同时保留本地磁盘上的文件。
01 | 为什么 .gitignore 不管用
.gitignore 只对「尚未被追踪」的文件生效。一旦某个文件已经被提交过,Git 就会持续追踪它,后续的忽略规则会被忽略。所以需要先主动取消追踪,再让忽略规则接管。
可以用下面的流程理解「忽略规则」与「追踪状态」之间的关系:
flowchart TD
A[文件存在于工作区] --> B{是否已被 Git 追踪?}
B -- 否 --> C[.gitignore 生效<br/>Git 忽略该文件]
B -- 是 --> D[.gitignore 不生效<br/>Git 持续追踪]
D --> E[执行 git rm -r --cached]
E --> F[文件变为未追踪状态]
F --> C
也就是说,.gitignore 决定的是「未追踪文件要不要被纳入追踪」,而 git rm --cached 决定的是「已追踪文件要不要退出追踪」。两者配合,才能让一个曾经提交过的目录彻底被忽略。
02 | 具体操作步骤
在项目根目录下依次执行以下命令。
① 从暂存区移除目录
git rm -r --cached scripts/
--cached 表示只从 Git 的暂存区(索引)中清理,不删除本地磁盘上的实际文件。
② 确认变更状态
git status
此时会看到 deleted: scripts/... 的提示,意思是 Git 准备删除对这些文件的追踪,而本地文件依然完好无损。
③ 提交这次更改
git commit -m "chore: remove scripts directory from git tracking"
④ 推送到远程仓库
git push
整个操作过程中,本地文件与 Git 追踪状态的变化如下:
sequenceDiagram
participant Local as 本地磁盘
participant Index as Git 暂存区/索引
participant Remote as 远程仓库 GitHub
Note over Local,Index: 操作前:scripts/ 已被追踪
Local->>Index: git rm -r --cached scripts/
Note over Local: 本地文件保持不变
Note over Index: 取消对 scripts/ 的追踪
Index->>Index: git commit
Index->>Remote: git push
Note over Remote: scripts/ 从远程仓库移除
03 | 执行后的效果
- 远程仓库(GitHub):
scripts/目录及其下的文件会从最新提交中移除,但历史提交中仍然保留。如需从整个 Git 历史中彻底清除,需要使用git filter-repo等工具重写历史。 - 本地文件夹:电脑上依然完整保留
scripts/文件夹和所有脚本。 - 后续变化:在
.gitignore中添加scripts/规则后(如果尚未添加,请在提交前完成),之后本地对它的修改或新增文件,Git 都不会再提示或追踪。
关注我,和AI一起成长~
AlfredZhao©版权所有「从Oracle起航,领略精彩的IT技术。」
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/23150769
转载请注明原文链接:https://www.cnblogs.com/jyzhao/p/23150769
👋 感谢阅读,欢迎关注我的公众号 「赵靖宇」
浙公网安备 33010602011771号