前言:在提交推送本地更改至倉(cāng)庫(kù)時(shí),誤將大文件給提交了,導(dǎo)致push時(shí)報(bào)錯(cuò)文件過大,因此需要將已經(jīng)commit的大文件移除后再push
若已知要?jiǎng)h除的文件或文件夾路徑,則可以從第4步開始
1.對(duì)倉(cāng)庫(kù)進(jìn)行gc操作
$ git gc
2.查詢大文件
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
?注意此處是從.git文件夾中查詢的,因此需要再倉(cāng)庫(kù)根目錄里執(zhí)行
顯示的結(jié)果則為大文件,前6位id為文件提交id?
3.獲取id對(duì)應(yīng)的文件名
git rev-list --objects --all | grep id名稱
如:git rev-list --objects --all | grep 78b35d
?id后面的就是文件全路徑名
4.刪除文件? (若知道文件路徑,則直接執(zhí)行下面命令即可)
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch 文件名' --tag-name-filter cat -- --all
如:
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch CustomPhysics2DIntProject2022.3/Build/01 - 副本/UnityPlayer.dll' --tag-name-filter cat -- --all
若要?jiǎng)h除某個(gè)目錄,則直接填目錄即可 如:
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch CustomPhysics2DIntProject2022.3/Build' --tag-name-filter cat -- --all
如果出現(xiàn)異常:?Cannot rewrite branches: You have unstaged changes.
執(zhí)行命令:
git stash
后重新刪除
?5.刪除指向舊提交的指針
rm -rf .git/refs/original/
6.刪除log
rm -rf .git/logs/
7.放棄所有未關(guān)聯(lián)對(duì)象恢復(fù)的可能性
git reflog expire --expire=now --all
8.清理垃圾重新打包
git repack -A -d //重新打包
git gc --aggressive --prune=now //清理垃圾,重新打包
9.強(qiáng)行推送遠(yuǎn)端文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-647581.html
git push --force
git push --force --all
10.多個(gè)分支清理文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-647581.html
git checkout branchName //切換分支,多個(gè)分支需要分別清理
到了這里,關(guān)于Git移除commit過的大文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!