那天在社團看到一篇求救文,內容主旨是這樣的,求救者把花費六小時所撰寫的 commit,在還沒 push 前就把它給 drop 掉了(允悲
不過幫他哀弔完之後,我也想知道怎麼把 commit,因為我很怕下一個做這蠢事就是我 XDDD
求救文(圖片來源: Taiwan 程式語言讀書會|Facebook)
所有的操作記錄都保留下來
求救文在下方的留言中,有一位米一粒的留言,他說當你製作提交紀錄時,就已經讓紀錄進入版本管控中,而 Push 這動作只是將紀錄推送遠端數據庫而已。因此,只要有提交過紀錄、產生過 Hash,就有機會藉由這筆 Hash 拿回這筆紀錄?
不過問題來了,我都把 commit 給丟了,我要怎查詢 commit 的 Hash code?這時可以用 git reflog
指令,來顯示每個指令的 SHA-1 值:
1 |
|
從紀錄看來,依序製作了三個 commit,接下來下了 rebase
指令,最後把 HEAD 移動到了 commit2 的位置,也就是我把 commit3 給丟了。好了,重點是第四行,那邊有被刪除的 commit3 的 Hash code!
恢復 commit
在得知被刪除的 commit 的 Hash code 後,就可以透過 git reset
來還原了:
1 |
|
再用 git reflog
看看目前 HEAD 的狀況:
1 |
|
歐耶~!把 commit 找回來了!
參考資料
- Calos。GIT 遺失 commit 後的恢復方法 。檢自 Calos’s Blog (2021-02-04)。
- 洧杰 (2019-11-17)。git reflog - 還原大招 。檢自 W3HexSchool (2021-02-04)。
更新紀錄
最後更新日期:2021-03-07
- 2021-03-07 發布
- 2021-02-04 完稿
- 2021-02-04 起稿