iT邦幫忙

0

如何刪除GIT誤commit的大檔案

ctr1 2023-03-29 11:25:562414 瀏覽
  • 分享至 

  • xImage

GIT分支架構如下,在79830a的時候不小心把大檔案commit且push到遠端,
在0a44953時才把它刪除且push回去,但整個project變成很大一包,
是否可以刪除指定commit或如何把以前誤傳的檔案刪除,不要在版本控制內

*  ddd73c0(HEAD, origin/main, origin/HEAD)
*  0a44953
*  95f94d3 
|\
|* 5e8aa46
|* 798d30a
|/
* 4854beb(tag: v1.0.0)
|
ffaanngg iT邦新手 5 級 ‧ 2023-03-30 06:25:26 檢舉
看不太懂,為什麼在0a44953刪除後,project整個會變大包?
DennisLu iT邦好手 1 級 ‧ 2023-03-31 15:23:45 檢舉
他的意思是 他曾經add大檔案 commit push ,
發現不應該,刪除後,又commit一次刪除後的版本,
但發現專案總容量肥了。

那大檔案已經曾經存在一個版本,就會存在版控紀錄中,
整個專案當然因為那大檔案紀錄存在,會肥了不少。
checkout 那個版本,大檔案也是會回來啊,怎麼回來,就是來自於那紀錄。
基於版控機制,所以專案總用量會肥起來。
最新版本的是不包含那大檔案。

所以加了不應該加的東西,別以為刪除後commit push,最新版本不存在就好。它其實一直存在...,嚴重程度可能就不小心被發現私鑰曾經存在某個版本,私鑰外流之類的。只因為一個組員的不小心。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
akitrash
iT邦新手 5 級 ‧ 2023-03-29 11:48:51

$ git rebase -i 4854beb

然後把不要的 commit drop 掉?


ref: 使用 Git Rebase Interactive 模式整理 Commit

1
Vader
iT邦研究生 4 級 ‧ 2023-03-30 14:59:51

您可以使用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歷史,因此請確保您知道自己在做什麼,以免丟失任何更改。

我要發表回答

立即登入回答