git删除历史提交记录中的文件

git删除历史提交文件

  • 查看占用
  • 查找提交记录
  • 删除ref中的引用
  • 执行gc回收
  • 强制推送至远程

由于项目中每次都会提交上去jar包,导致仓库体积越来越大,删除掉历史的没用的文件

经过删除,仓库由 3.3G 变为 1.1G

查看占用

git rev-list --objects --all | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' | sed -n 's/^blob //p' | sort --numeric-sort --key=2 | cut -c 1-12,41- | $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

按占用大小排序,可以看到jar的commit SHA值,然后我们要查找调用target/demo-1.1.1.jar的提交记录
git删除历史提交记录中的文件_第1张图片

查找提交记录

git log --pretty=oneline --branches -- target/demo-1.1.1.jar

在这里插入图片描述
比如我们要删除上线之后所有的提交记录,那么就需要找到上线的SHA值前几位,输入以下

git filter-branch --index-filter 'git rm --cached --ignore-unmatch target/demo-1.1.1.jar' -- 0292b33df8abb217^..

执行过程:
git删除历史提交记录中的文件_第2张图片

删除ref中的引用

rm -Rf .git/refs/original
rm -Rf .git/logs/

执行gc回收

git gc

git删除历史提交记录中的文件_第3张图片

强制推送至远程

git push --force

到此远端及本地的仓库已瘦身完成,还需要所有该项目的开发人员重新clone一下仓库,避免将历史commit文件重新提交到远程


参考文章
https://cloud.tencent.com/developer/article/1798408
https://www.cnblogs.com/fuhua/p/15527023.html

你可能感兴趣的:(Java,git)