Git删除已提交的文件
Git删除已提交的文件
昨天通过Git Bash提交代码的时候遇到了由于单个文件大小超过100M,导致代码上传失败的问题。考虑到那个大文件是用于训练模型的数据集,并没有进行版本控制的必要,为了方便以后能快速推送和拉取代码,决定设置Git忽略该文件并且从提交记录中删除它。本文记录了Git删除已提交的文件的整个过程,主要内容包括定位文件和删除文件。
定位文件
-
通过
git rev-list
命令确定需要删除的文件git rev-list --objects --all 6e218fcb1ce2dea99b0b11c4b2622e374c346d92 data/unaligned/dev 6cefb1936b02424bfeff514dbeee0c8e18f78fd4 data/unaligned/test adcdc9fd6b3171ef173e43a2dde9d3502b59c504 data/unaligned/train
-
可以配合使用
git verify-pack
和git rev-list
找出仓库中的大文件git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5 git rev-list --objects --all | grep adcdc9fd6b3171ef173e43a2dde9d3502b59c504 adcdc9fd6b3171ef173e43a2dde9d3502b59c504 data/unaligned/train
删除文件
-
通过
git filter-branch
命令删除文件git filter-branch --index-filter 'git rm --cached --ignore-unmatch data/unaligned/train' -- --all
-
主动回收资源、清理仓库
Git仓库历史有个缓存期,如果不主动回收、清理仓库历史,一般的这些记录还会保存一段时间。通过以下命令可以主动回收资源:
rm -rf .git/refs/original/ rm -rf .git/logs/ git gc git prune