Git 回滾啟示錄

公司同事在操作 Git 時不小心犯錯,把相當數量的程式——我猜有數千個——蓋過去,變成舊的了。想當然,整個專案就大爆炸。

當時的處理方法,是把所有的檔案手動比對,並直接覆蓋。但那數千個檔案的提交,依舊出現在歷史上面。結果就是上游方看到提交史,直接拒絕了我們的 Pull Request。

現在想想,我當時應該當機立斷,把所有資料立刻弄回同事操作失誤前。

不過接下來,要怎麼把這次回滾推上去才好?

有些人會選用 git push -f 直接覆蓋整個提交史,不過我認為這不是好辦法。因為整個專案的提交史遭到竄改,這影響遠比 git rebase 嚴重。

我原本認為應該用以原基礎為分支開新分之,再合併回來。不過看了看,其實有更好的辦法。那就是 git revert

也就是:發現錯誤後,立刻用 git revert 跳回到之前的提交,並立刻 git commit 提交並說明回退,再把這次回退提交,推送到遠端。

不過,就連 Gitlab 也能犯下如 rm -rf 這樣子的 Epic fail 了,這次大回滾又能說啥呢。

但我得從這次失敗中,學到正確的回滾方法。

參考資料