1. 程式人生 > >Git不小心commit了很大的檔案怎麼辦?

Git不小心commit了很大的檔案怎麼辦?

前言:

  大家使用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 是一個很強的命令。