Git 博大精深,最近工作一個不小心把還沒合併的 branch delete 掉了,直接 gg,好不容易做好的功能就這樣直接消失了,情急之下只能說服自己趕快再重做一次當作練習。
除了提醒自己下次仔細檢查在把 branch 刪掉之外,還有沒有其他可以解決這件事情呢?我找到的答案是 git reflog
。
分支只是一個指向某個 Commit 的「指標」,刪除這個指標並不會造成那些 Commit 消失。
既然刪除 branch 只是讓指標消失,commit 還在,那要怎麼把 commit 找回來呢?
HEAD
?HEAD 也是一個「指標」,指向某一個分支,通常可以把 HEAD 當做「目前所在分支」看待,而分支會隨著 commit 做移動。什麼意思,意思是說當 Git 往前推進一個 Commit 的時候,它所在的分支也會跟著往前移動。
reflog 的意思刷新日誌
當 Head
移動的時候(切換分支、commit...) Git 就會在 Reflog 上做紀錄,所以只要在 Terminal 上輸入 git reflog
就可以看到之前 commit 的記錄,如果平常 commit message 寫的仔細的話,透過搜尋,很快的就可以找到 commit 對應的 SHA 值。
取得 SHA 值,剩下的就簡單了,cherry pick
的功能是將 commit 撿起來做合併,所以我們只要在開發的 branch 上新開一個分支,使用 cherry pick [SHA]
就可以把不小心刪掉的 commit 撿回來了,找回失去的記憶就是這麼簡單~
【狀況題】不小心把還沒合併的分支砍掉了,救得回來嗎?
【冷知識】HEAD 是什麼東西?
【狀況題】不小心使用 hard 模式 Reset 了某個 Commit,救得回來嗎?
【狀況題】如果你只想要某個分支的某幾個 Commit?