Online Free Tools
  • Home
  • Dev Logs
Navigation
HomeDev Logs

删除提交历史中的文件夹 | Dev Logs

Back to Logs

日期:2026年1月8日 摘要:删除提交历史中的文件夹

【question】 如何删除已经提交github的文件夹以及提交仓库中的历史

【try to solve】 下面给出删除已提交文件夹及其历史记录的常用做法:

1) 如果只想在后续版本移除(保留历史):

  • 本地删除文件夹:rm -rf <folder>
  • 提交并推送:git add -A && git commit -m "remove <folder>" && git push
  • 历史仍保留;仅当前与未来版本不再包含该目录。

2) 彻底从历史抹除(重写历史,需强推,团队先沟通):

  • 备份仓库,确认无未推送工作。
  • 安装 git filter-repo(推荐替代 BFG):
brew install git-filter-repo   # macOS
  • 重写历史移除目录(示例移除 secret-folder):
git filter-repo --path secret-folder --invert-paths
  • 多个目录可重复 --path <dir>。
  • 若需清理大文件,可用 --strip-blobs-bigger-than 10M。
  • 检查结果:git log --stat | head、确认目标目录消失。
  • 强制推送覆盖远端:
git push --force --all
git push --force --tags
  • 如是公共仓库,提醒协作者重新克隆或 git fetch --all && git reset --hard origin/main(会丢本地改动)。

3) GitHub UI 删除 release/attachements(可选)

  • 若有 release 附带大文件,需到 GitHub Release 页面手动移除后再重推。

4) 防止再次提交

  • 将目录加入 .gitignore:在 .gitignore 追加 <folder>/,再提交。

风险与注意事项

  • 重写历史会改变提交哈希,已克隆的开发者必须重新同步;在多人协作时务必事先沟通。
  • 公共仓库如曾被 fork,fork 中的历史仍会保留;无法完全抹除公开副本。

如需我直接在当前仓库清理指定目录,请告知目录名;若需仅删除最新版本不改历史,也请说明。

Online Free Tools · Learning project · Iterating