详情

Git版本控制器工具,如何删除放入暂存、已经添加备注、未正式提交仓库、git历史中包含的大文件?

Git中有时会误添加单个文件大小大于100M的文件,最后提交到远程仓库,如果没有之前已经配置过可以上传单个大文件的话,这个时候就会报错。如果确实需要上传大文件那就需要做配置,这里不做讲述。但大多数都不会上传大于100M的单文件,以下是解决方法:

一、查看文件大小靠前的几个

git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 2 -g | tail -2

输出结果如下,依次是文件ID、文件类型、文件字节数、size-in-packfil、offset-in-packfile:

f628e3087f5e32c2c84f2f7d5879744df31511e1 blob   348670 347901 444010

3e2109358e393b52d0583c688ae8d3b36a4d3c41 blob   503391 146406 59027

这时会列出随机生成的文件名序号

二、怎么检查文件具体的名称,根据文件的ID(SHA1),查找文件路径有以下两种方法:

git rev-list --objects --all | grep  a8c9f4aba231a4eb2ae52080e404ae6d7720da24

git whatchanged --all --find-object=a8c9f4aba231a4eb2ae52080e404ae6d7720da24

三、Git文件进行删除,根据上述查到的名称进行文件删除

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 文件名全称包括后缀名' --prune-empty --tag-name-filter cat -- --all

特别注意的是:若存在有多个分支,这个时候可能需要切换相应分支后再进行删除。重新大文件查看第一步骤进行验证,查看是否真的删除,如果已删除,将不会有任何信息返回。

四、Git执行清理历史记录命令

rm -rf .git/refs/original/;

git reflog expire --expire=now --all;

git gc --prune=now; 大文件的索引都切断了,这个时候进行垃圾回收

git gc --aggressive --prune=now;

五、Git强行推到远端仓库命令

git push --force --all

推荐文章
QQ:2529452897 | 邮箱:sw_vip@126.com
Copyright © 2021-2024 itwebme.com 版权所有 豫公网安备41010402002807 豫ICP备2021022777号-1