“我不小心使用 git branch -D 刪除了本地分支”,或者“我運行了 git reset --hard HEAD~1 並丟失了我未推送的提交!”如果您使用 Git 工作過一段時間,您可能經歷過這些令人胃口大開的時刻之一。
雖然標準 git log 指令不會顯示已刪除分支或分離提交的引用,但您無需驚慌。 Git 有一個名為 git reflog 的內建安全網。
在本指南中,我們將探索如何使用 git reflog 追蹤的本機交易歷史記錄來檢索遺失的提交並還原已刪除的分支。
1.什麼是git reflog?
git reflog(參考日誌)是您的 HEAD(目前工作區指標)隨著時間的推移所指向的位置的日誌。
雖然常規 git log 映射永久公共提交結構(DAG 樹),但 git reflog 追蹤您在本地執行的每個私有命令,包括:
- 結帳(切換分支)
- 提交和提交修改
- 重置 (
git reset) - 合併和變基
- 拉取和獲取
引用日誌條目完全是本地的,不會推送到遠端。預設情況下,Git 會將這些日誌保留 30 到 90 天,然後垃圾收集會將其清除。這意味著如果您在保留期結束之前採取行動,幾乎所有「遺失」的提交都可以恢復。
2. 恢復意外刪除的分支
如果您刪除了尚未合併或推送到遠端的分支,請按照以下步驟進行救援。
第 1 步:列印引用日誌歷史記錄
打開終端機並運作:
git reflog
您將看到類似於以下內容的輸出:
7c2a1b3 HEAD@{0}: checkout: moving from feature-auth to main
8f9e0d1 HEAD@{1}: commit: feat: implement login API validation
5a4c3d2 HEAD@{2}: commit: feat: design login interface layout
...
步驟 2:找到已刪除分支的最後一次提交
查看日誌條目以確定您仍在處理已刪除分支 (feature-auth) 的時刻。在此範例中,該分支的最後一個有效狀態是提交 8f9e0d1 (「功能:實作登入 API 驗證」)。
第 3 步:從提交哈希重新建立分支
若要恢復此確切提交的分支,請執行:
git branch feature-auth 8f9e0d1
您刪除的分支現已完全恢復,並包含其所有提交。
3. 從危險的硬重置中恢復
如果您執行了像 git reset --hard 這樣的破壞性命令並清除了本機提交,則可以反轉時脈。
第 1 步:在重置之前確定提交
執行 git reflog 來檢查時間軸:
3b2a1c9 HEAD@{0}: reset: moving to HEAD~1
9e8d7c6 HEAD@{1}: commit: feat: complex payment integration
在這裡,我們可以看到重置發生在 HEAD@{0},遠離 HEAD@{1} (雜湊 9e8d7c6),其中包含我們遺失的支付整合提交。
第 2 步:啟動救援分支
最安全的方法是從目標哈希創建一個新分支,而不是冒著在當前分支上再次硬重置的風險:
git checkout -b rescue-branch 9e8d7c6
現在您可以將此救援分支合併回您的開發分支或直接從此處繼續工作。
結論
git reflog 是您當地的保險單。記住:
- **
HEAD指標的任何移動都會在本地進行追蹤。 ** - **只要你知道提交哈希,你就可以重建或檢查任何歷史點。 **
- **在 Git 的垃圾收集永久刪除無法存取的物件之前迅速採取行動。 **
下次當 Git 指令沒有照計畫執行時,請記住這個工具。

