编程 彻底删除 Git 中的较大文件(包括历史提交记录)

2024-11-18 06:30:20 +0800 CST views 683

在 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 仓库中的较大文件,包括所有的历史提交记录,确保文件从仓库中完全消失。

复制全文 生成海报 版本控制 代码管理 开发工具

推荐文章

如何开发易支付插件功能
2024-11-19 08:36:25 +0800 CST
Vue中如何使用API发送异步请求?
2024-11-19 10:04:27 +0800 CST
HTML + CSS 实现微信钱包界面
2024-11-18 14:59:25 +0800 CST
避免 Go 语言中的接口污染
2024-11-19 05:20:53 +0800 CST
Vue3结合Driver.js实现新手指引功能
2024-11-19 08:46:50 +0800 CST
rangeSlider进度条滑块
2024-11-19 06:49:50 +0800 CST
html5在客户端存储数据
2024-11-17 05:02:17 +0800 CST
Vue3中的Store模式有哪些改进?
2024-11-18 11:47:53 +0800 CST
JavaScript设计模式:单例模式
2024-11-18 10:57:41 +0800 CST
Go 如何做好缓存
2024-11-18 13:33:37 +0800 CST
推荐几个前端常用的工具网站
2024-11-19 07:58:08 +0800 CST
OpenCV 检测与跟踪移动物体
2024-11-18 15:27:01 +0800 CST
15 个 JavaScript 性能优化技巧
2024-11-19 07:52:10 +0800 CST
JS 箭头函数
2024-11-17 19:09:58 +0800 CST
最全面的 `history` 命令指南
2024-11-18 21:32:45 +0800 CST
pip安装到指定目录上
2024-11-17 16:17:25 +0800 CST
MyLib5,一个Python中非常有用的库
2024-11-18 12:50:13 +0800 CST
WebSQL数据库:HTML5的非标准伴侣
2024-11-18 22:44:20 +0800 CST
实现微信回调多域名的方法
2024-11-18 09:45:18 +0800 CST
浅谈CSRF攻击
2024-11-18 09:45:14 +0800 CST
Golang Sync.Once 使用与原理
2024-11-17 03:53:42 +0800 CST
程序员茄子在线接单