取消 remote 上某個錯誤的 git commit

今天很蠢的把一個很大的檔案 push 到 remote repo 上,經過了一番 commit 後,在 deploy 時才驚覺到這樣以後會造成很大的麻煩(每次 deploy 都會把這個大檔 clone 回來!超慢!),所以決定把 repo reset 回先前的狀態,至於後續的一些 commit,再一筆一筆 apply 回去。

首先,用 git log 找到錯誤 commit 的 SHA-1 Hash,例如這個好了:818645de,然後用 git format-patch 產生從此 commit 以後的 patch 檔案:

如此會產生一連串 patch 檔案, 例如

接下來找到錯誤 commit 的前一個 SHA-1 Hash,例如 eae85321 好了,以 git reset 回復:

這時 HEAD 會回到沒有該錯誤 commit 的狀態,此時便利用 git am 來將這些 patch apply 回去,但要注意的是,第一次要先執行 git am --abort 不然會產生

之類的錯誤訊息。接著把 patch apply 回去即可。

因為我三不五時就會想把 commit push 到 remote 去,所以這時得用

來將 remote 上的資料覆蓋。收工。


Leave a Reply