如何从 Git 仓库中删除目录
删除被跟踪的目录:git rm -r <目录> 并提交;保留本地文件只停止跟踪用 git rm -r --cached <目录>。从历史中彻底抹除(大文件瘦身)用 git filter-repo --path <目录> --invert-paths。
彻底删除:git rm -r 目录名 然后提交——文件从磁盘和版本库同时移除。只想停止跟踪、本地保留:加 --cached。要连历史记录一起抹掉(仓库瘦身、删除泄密目录)需要 git filter-repo 重写历史。
常规删除
git rm -r old-module/
git commit -m "移除废弃模块"
停止跟踪但保留本地文件
git rm -r --cached logs/
echo "logs/" >> .gitignore # 顺便配好忽略
git commit -m "停止跟踪 logs 目录"
从历史中彻底抹除
git filter-repo --path old-module/ --invert-paths
git push --force # 历史被重写,需强推
所有协作者要重新克隆。密钥/敏感数据场景:清完历史仍要作废该密钥——历史可能已被 fork、缓存。
常见问题(FAQ)
Q:git rm -r 会删空目录吗?
Git 本来就不跟踪空目录。目录里最后一个被跟踪文件删除后,目录对 Git 就不存在了(工作区的空壳目录可用 git clean -fd 清掉)。
Q:删除后仓库体积怎么没小?
提交历史里旧版本还在,仓库数据不减反增(多一个删除提交)。要瘦身必须 filter-repo 重写历史 + 远端强推 + 联系平台清缓存。
Q:误删了怎么恢复?
未提交:git restore .;已提交:git restore --source=<删除前的提交> -- 目录 整目录还原。