在 Git 项目中,如果想要彻底删除较大文件(包括历史提交记录),仅在当前目录中删除文件是不够的。只要在提交记录中存在该文件,.git
目录中就会保留该文件的信息。
使用 git filter-branch
可以强制修改提交信息,抹去某个文件的历史提交痕迹,使得该文件仿佛从未存在过。
删除步骤
0. 确保本地仓库为最新版本
在进行任何操作之前,先确保本地仓库是最新版本,已同步所有远程更改。
1. 列出仓库中的大文件
在项目根目录下运行以下命令:
git rev-list --all | xargs -rL1 git ls-tree -r --long | sort -uk3 | sort -rnk4 | head -10
该命令会列出所有仓库中的对象(包括SHA值、大小、路径等),并按照大小降序排列,显示前10个文件。
2. 删除指定文件的提交历史
根据最大文件的路径 {filepath}
,使用以下命令删除该文件的所有提交历史:
git filter-branch --tree-filter "rm -f {filepath}" -- --all
3. 强制推送到远程仓库
将修改后的仓库强制推送到远程分支:
git push -f --all
注意:此操作会覆盖远程仓库中的历史记录,请确保对其他开发者进行了充分的通知。
4. 验证删除结果
完成后,可以重新克隆项目或在现有项目中列出所有仓库中的对象,检查刚刚删除的文件是否还存在:
git rev-list --all | xargs -rL1 git ls-tree -r --long | sort -uk3 | sort -rnk4 | head -10
如果删除操作成功,列出的文件列表中不应再包含刚刚删除的大文件。
通过以上步骤,您可以彻底删除 Git 仓库中的较大文件,包括所有的历史提交记录,确保文件从仓库中完全消失。