跳轉到

5.3 災難救援#

場景:救回誤刪的分支或 Commit#

你不小心刪了一條還沒合併的分支,或 git reset 回了太舊的版本——那些 commit 看起來消失了。別慌,在 Git 裡 commit 很少真的消失。

關鍵工具:git reflog#

Git 會默默記錄你 HEAD 的每一次移動(commit、切分支、reset、merge……),這份紀錄就是 reflog:

git reflog

輸出範例:

a1b2c3d HEAD@{0}: commit: 完成登入表單
e4f5g6h HEAD@{1}: reset: moving to HEAD~1
i7j8k9l HEAD@{2}: commit: 新增驗證邏輯
...

每一行都是你「曾經到過」的地方。就算 commit 已不在任何分支上,只要它在 reflog 裡,就救得回來。

救援三步驟#

第一步:找到出事前的位置

git reflog

從清單中找到出事前最後一個正常的 commit(如 i7j8k9l)。

第二步:直接回到那個位置

git reset --hard i7j8k9l

或者,如果是救回被刪掉的分支:

git branch feature/login i7j8k9l    # 在那個位置重建分支

第三步:確認

git log --oneline

你的 commit 都回來了。

reflog 的保鮮期#

預設情況下,reflog 紀錄會保留 90 天,所以就算是幾週前的災難也多半有救。但別拖太久。

其他常見災難#

災難 解法
誤刪工作區的檔案(未 commit 過) 救不回,Git 管不到沒追蹤的檔案
誤 git restore 丟掉修改 多半救不回,所以 restore 前要三思
誤 commit 機密檔案 git rm --cached 移除追蹤 + 改密碼(歷史裡已經有了)
push 了不該 push 的 若是私人 repo 可 force push 改寫;公開 repo 視為已洩漏

黃金法則:越早發現、越早 reflog,越容易救。出事後先停下來,不要繼續亂操作。