喔不!我誤刪了我的git分支!

在開發的時候有時精神不濟,手殘刪掉正在開發的分支,瞬間精神都來了,還記得第一次誤刪分支的我背脊發涼,覺得世界要崩塌了,這幾天的工作進度是否要全部重來呢…?,以往我的認知是 git reset 或是 delete branch 都是真的把 git 紀錄刪除,但其實並不然,只要秉持著一個觀念,誤刪分支就不會那麼可怕

git 上的紀錄並不會消失,只是它隱藏到你看不見的地方而已

正常的操作下,即使是執行刪除或還原,git 還是會保有先前的紀錄,接下來會模擬一次如何救回誤刪分支的流程,假設當前有一個開發中的分支叫做 feature/login ,上面有三個 commit 紀錄

接著假裝手殘不小心按到 delete branch 的按紐

按下刪除之後發現自己還沒 merge 回 develop! 該如何是好!? feature/login 已經消失在線圖上! 別慌張,打開 terminal 開始即刻救援

git reflog

執行 git reflog 指令之後,會看到密密麻麻的 commit 紀錄,找出剛剛被刪掉的分支最後一個 commit 點在哪,並且記下最前面的 SHA-1 值

git checkout -b [分支名] [SHA-1 值]

接下來就是見證奇蹟的時刻了,執行 git checkout -b recover 055744a 之後,消失的分支再次出現在我們的面前,這個指令的意思是建立一個全新的分支,並且將這個分支的進度指到 055744a 的這個節點上

分支本身就像是指標或貼紙一樣的東西,它指著或貼在某個 commit 上面。在 Git 裡,刪除分支就像是你把包裝盒上的貼紙撕下來,貼紙撕掉了,盒子並不會就這樣跟著消失。— 為你自己學 Git

上面這段話也可以解讀為凡走過必留下痕跡,之後如果再遇到類似狀況就不必再這麼慌張了,分支沒有不見只是暫時看不到它而已!

參考資料: Git 面試題