git filter-branch 命令修改删除提示记录,删除误提交的大文件.减小.git的大小

来源:赵克立 分类: 其它 标签:Git发布时间:2018-01-14 12:35:53浏览:359
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
温馨提示:
技术类文章有它的时效性,请留意文章更新时间以及软件的版本
更新时间:
2018-01-14 16:34:32

git仓库用久啦可能会很大,尤其是在你不经意间提交啦一个大文件,后来发现后赶紧把它删除掉啦,在你的源代码里是没有了并且源代码文件也不大,但是在  .git  这个文件夹里还是有它的记录啦大小也有,下面就说明一个解决方法使用git的一个很危险但又是最方便的一个命令

filter-branch 遍历提交日志用指定的脚本进行一些处理

参数

--tree-filter   此选项会在每次检出项目时先执行指定的命令然后重新提交结果。

--msg-filter表示修改提交信息原提交信息从标准输入读入,新提交信息输出到标准输出

--prune-empty 表示如果修改后的提交如果为空则扔掉不要

-f 是忽略备份。不加这个选项第二次运行这个命令时会出错,意思是 git 上次做了备份,现在再要运行的话得处理掉上次的备份。

--all 。表示在所有分支上执行这些操作


git filter-branch使用起来有点危险,它可以分别检出每一个分支linux下可以直接在终端运行,windows下要在git base下运行不然会找不到文件路径如下图

image.png

从分支所有提交中删除指定文件

从当前激活的分支前30次提交中删除指定文件

git filter-branch --prune-empty  --tree-filter 'git rm -f --ignore-unmatch 文件路径' HEAD~30..HEAD

如果后面不加分支,就会遍历所有分支

操作完成后,查看日志就会发现已经没有提交这个文件的日志记录啦,但是还有一个问题 .git 这个文件夹还是原来的大小,想减小它的大小就要对这个仓库进行分析重新打包,也就是清理垃圾。直接执行下面一些命令就ok

git rm -rf --ignore-unmatch .git/refs/original/
git reflog expire --expire=now --all
git fsck --full --unreachable
git repack -A -d
git gc --aggressive --prune=now

最后强制推送到远端

git push origin master --force

注意如果无端.git文件也是很大就得在远端进行同样的清理垃圾操作,

后记:我就是一不小心提交啦一个1.5G的视频文件,源代码中是删除啦但是远程仓库还是有这个记录的、其它人pull的时候一直挂起,文件太大啦下载不下来  !     :(


微信号:mokuyu QQ群:215861553 紧急求助须知
留下一点心意, :)
点击更换验证码
留言