如何把舊的 git commit 歷史記錄移除掉
作者:gugod 發佈於: #git最近在替一些過分肥大的 git 倉庫抽脂瘦身 (?) 。順便記錄一下這個把舊的 commit 歷史記錄移除掉的方法。
令 $DIGEST
是個 commit id:
git replace --graft $DIGEST
git filter-branch
這麼做完之後,$DIGEST
之前的歷史就會消失了。不過 branch 中所有 commit
id 全部會變過。$DIGEST
這個 commit id 本身也會變幻為另一個而消失。如
果這倉庫有多處複本的話,大家都要重新 clone
。
幾年前並沒有 git-replace 這支指令,弄起來複雜多了,不過看來也出現
一陣子了。跑git-filter-branch 下去則是會把目前 branch 整條從頭到
尾重新 commit 一次,基本上很類似於 rebase 到一個新的 root commit 上,
但有一不同之處為起始狀態並非空的,而是會等同於 $DIGEST
當時的狀態。
不做 git-filter-branch
這一步其實也可以省略。但這樣一來就只是讓 git log
等指令不會往更舊的歷史追去,實質上 .git/
目錄中的舊內容是沒有被清除掉的。