GIT分支架構如下,在79830a的時候不小心把大檔案commit且push到遠端,
在0a44953時才把它刪除且push回去,但整個project變成很大一包,
是否可以刪除指定commit或如何把以前誤傳的檔案刪除,不要在版本控制內
* ddd73c0(HEAD, origin/main, origin/HEAD)
* 0a44953
* 95f94d3
|\
|* 5e8aa46
|* 798d30a
|/
* 4854beb(tag: v1.0.0)
|
您可以使用Git的"rebase"和"filter-branch"指令來刪除Git歷史中的特定commit或檔案,以便它們不再受版本控制。
刪除指定commit
使用以下指令刪除特定commit:
git rebase -i ~1
這個指令會打開一個交互式的編輯器,列出了所有從到當前HEAD的commit。在這個文件中,找到要刪除的commit行,將它的開頭的"pick"改為"drop",然後保存退出編輯器。Git會自動刪除該commit和相應的更改。
刪除特定檔案
使用以下指令刪除特定檔案:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch " --prune-empty --tag-name-filter cat -- --all
這個指令會強制重寫整個Git歷史,從而從該檔案中刪除指定的文件。該文件將從所有commit中刪除,但在運行該命令之前,請確保你已經備份了您的存儲庫。
最後,您需要強制推送這些更改到遠端倉庫,以便它們反映在其他用戶的本地存儲庫中。使用以下指令進行強制推送:
git push --force origin
注意:這些操作會重寫Git歷史,因此請確保您知道自己在做什麼,以免丟失任何更改。