Git不小心commit了很大的檔案怎麼辦?
阿新 • • 發佈:2018-11-12
前言:
大家使用git不知道有沒有一個習慣,基本就是 一套 df 二連 素質三連:
1 git add . 2 git commit -m 3 git pull 4 git push
拉閘,不小心commit了超過10M的檔案,拉閘。 出現了一個錯誤。
The size of file ‘xxx‘ has exceeded the upper limited size (10 MB) in commit
意思就是我們commit超過10MB的檔案無法提交。 (git 可以修改這個上限,自己去百度,好像上限是50MB)
這時候不小心將一個很大的檔案新增到庫中,即使刪除,記錄中還是儲存了這個檔案。以後不管是拷貝,還是push/pull都比較麻煩,尤其是在做CI時的耗時很痛苦。
方法:
1、若知道你的大檔案是什麼型別的,比如.gz或者.jar等,可以刪除匹配xxx的所有檔案:
比如我很明顯就提示我是xxx.jar 太大了。 因為我打了整個專案的jar包,接近100MB肯定大
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.gz' --prune-empty --tag-name-filter cat -- --all
2、若不知道,想檢視下目前git庫中有哪些大檔案,可以用底層命令verify-pack識別出大物件:
git verify-pack -v .git/objects/pack/pack-8eaeb...9e.idx | sort -k 3 -n | tail -3
然後根據物件id查詢物件的名稱:
git rev-list --objects --all | grep 185ab8d
然後刪除
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 物件path' --prune-empty --tag-name-filter cat -- --all
3、釋放空間
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
4、把修改強制推送到遠端
git push origin --force --all
我的話 是知道哪個jar了,所以我直接就使用第一個方法 匹配刪除了
其實 git filter-branch 是一個很強的命令。