臭大佬 2020-07-31 17:41:30 996
简介 github仓库中删除历史大文件




# 查看 git 文件对象大小
git count-objects -v

# 列出体积最大的 top10
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -10
# 4bdc96af2540a6002a60e0f8026ac6edb8ceec7f blob   2104539 2103812 68220097
# bcaab23744d18bf7d80e2914a4820e199954b7a7 blob   2681512 2679930 52983447
# d0dd82d41145885996285a67d119862256e09b3d blob   2689821 2685468 70323909

# 查看具体文件名称
git rev-list --objects --all | grep <commit-id>
# 栗子: git rev-list --objects --all | grep bcc72e78c11b79c3744ae6b0cc36806b6d02dde5
# 结果: 4bdc96af2540a6002a60e0f8026ac6edb8ceec7f public/images/background/bg4.jpg

# 清除该文件
git filter-branch --force --index-filter 'git rm --cached -r --ignore-unmatch file_you_want_to_delete' --prune-empty --tag-name-filter cat -- --all
# 栗子:git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 'public/images/background/bg4.jpg'"  --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
# 如果这一步有权限不足的问题,需要手动到github上将master分支的保护去掉
git push origin master --force
# 清理远程仓库
git remote prune origin


如果 ·git push· 出现如下问题

hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., ‘git pull …’) before pushing again.
hint: See the ‘Note about fast-forwards’ in ‘git push —help’ for details.


git pull origin dev --allow-unrelated-histories