有時候我們錯誤地push了一個大文件到Git服務(wù)器上荷逞,如果只是從本地刪除該文件,然后commit并push涩澡,其他協(xié)作者拉到的最新代碼確實是不會有該文件坠敷,但該文件仍然存在Git服務(wù)器的歷史記錄里射富,并且占據(jù)著服務(wù)器磁盤空間粥帚。
要想從服務(wù)器中徹底刪除該文件,需要在本地git項目根目錄執(zhí)行:
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch app/libs/target.aar' --prune-empty --tag-name-filter cat -- --all
如果要刪除的是一個文件夾芒涡,則需要在--cached
后面添加-r
參數(shù),表示遞歸刪除弛槐。
看到有類似以下輸出依啰,則表示成功了:
Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266)
但如果輸出的是類似xxxxx unchanged
這種提示,則說明目標(biāo)文件不存在速警,或者路徑有誤。
然后推送修改到服務(wù)器:
git push origin --force --all
這可能會花費較長的時間长豁,因為相當(dāng)于重新建立了一個空的倉庫忙灼,然后把文件重新推上去,只不過保留了提交歷史而已酸舍。
運行一段時間確認(rèn)無誤后里初,執(zhí)行以下命令回收垃圾:
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
別忘了及時通知你的協(xié)作者拉取最新代碼,以免到后面出現(xiàn)不可解決的沖突双妨。
這是一個風(fēng)趣幽默的博主刁品,不定時分享技術(shù)和生活干貨,趕緊關(guān)注一波吧~~