Git 回滾啟示錄
公司同事在操作 Git 時不小心犯錯,把相當數量的程式——我猜有數千個——蓋過去,變成舊的了。想當然,整個專案就大爆炸。
當時的處理方法,是把所有的檔案手動比對,並直接覆蓋。但那數千個檔案的提交,依舊出現在歷史上面。結果就是上游方看到提交史,直接拒絕了我們的 Pull Request。
現在想想,我當時應該當機立斷,把所有資料立刻弄回同事操作失誤前。
不過接下來,要怎麼把這次回滾推上去才好?
有些人會選用 git push -f
直接覆蓋整個提交史,不過我認為這不是好辦法。因為整個專案的提交史遭到竄改,這影響遠比 git rebase
嚴重。
我原本認為應該用以原基礎為分支開新分之,再合併回來。不過看了看,其實有更好的辦法。那就是 git revert
。
也就是:發現錯誤後,立刻用 git revert
跳回到之前的提交,並立刻 git commit
提交並說明回退,再把這次回退提交,推送到遠端。
不過,就連 Gitlab 也能犯下如 rm -rf 這樣子的 Epic fail 了,這次大回滾又能說啥呢。
但我得從這次失敗中,學到正確的回滾方法。
參考資料
- How do I properly force a Git push?
- Git reset --hard and a remote repository
- Force “git push” to overwrite remote files
- 【狀況題】聽說 git push -f 這個指令很可怕,什麼情況可以使用它呢?
- 【狀況題】啊!不小心把檔案或目錄刪掉了…
- Reset、Revert 跟 Rebase 指令有什麼差別?
- 員工接連犯錯,公司可以開除他嗎?法律專家的 3 點提醒
- 員工犯錯時,主管應該怎麼做?微軟執行長給主管的三個建議
- 有犯錯空間,才有更多學習的空間
- 部屬犯錯先別發怒,主管要反問「接下來,你打算怎麼辦?」