问题场景如下,今天在review代码的时候,发现几天前的一个提交里,错误的包含一些和项目无关的代码,这些文件产生了如下后果
- 在最新的提交中删除这批文件,空间仍然不会被释放
- git仓库占用空间从20m,暴增到400+m, 在使用git托管服务服务的时候,系统对仓库大小会有限制
- 每次从远程仓库clone该respository都会复制这些无用的文件,即使这些文件在工作空间中不存在
在询问chapt,并验证其方法可用之后,整理解决方案如下
# 假设要删除的部分是 'public/assets/images/Some\ Desktop/**/*'
# 删除代码
git filter-branch --tree-filter 'rm -rf public/assets/images/Some\ Desktop' -- --all
# 等待命令执行完成。这可能会花费一些时间,具体取决于你的仓库大小和提交历史的长度。
# 执行完命令后,Git会重新写入提交历史。你会看到一些类似于 Ref 'refs/...' was rewritten 的输出信息。
# 完成重写后,使用以下命令强制推送你的更改到远程仓
# 这将覆盖远程仓库的历史记录,请确保你在执行这个命令之前与其他协作者进行协商
git push --force --all