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

Joe Chang
Coding Hot Pot
Published in
Feb 16, 2022
photo by @franciscoegonzalez

在開發的時候有時精神不濟,手殘刪掉正在開發的分支,瞬間精神都來了,還記得第一次誤刪分支的我背脊發涼,覺得世界要崩塌了,這幾天的工作進度是否要全部重來呢…?,以往我的認知是 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 面試題

--

--

Joe Chang
Coding Hot Pot

前端工程師,唯有非常努力,才能看起來毫不費力