iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
1
自我挑戰組

那些我還沒深入理解就開始使用的東西系列 第 11

git reflog 如何找回消失的 commit 記錄?

  • 分享至 

  • xImage
  •  

Git 博大精深,最近工作一個不小心把還沒合併的 branch delete 掉了,直接 gg,好不容易做好的功能就這樣直接消失了,情急之下只能說服自己趕快再重做一次當作練習。
除了提醒自己下次仔細檢查在把 branch 刪掉之外,還有沒有其他可以解決這件事情呢?我找到的答案是 git reflog

1. branch 的本質是什麼?

分支只是一個指向某個 Commit 的「指標」,刪除這個指標並不會造成那些 Commit 消失。

既然刪除 branch 只是讓指標消失,commit 還在,那要怎麼把 commit 找回來呢?

2. 什麼是 HEAD

HEAD 也是一個「指標」,指向某一個分支,通常可以把 HEAD 當做「目前所在分支」看待,而分支會隨著 commit 做移動。什麼意思,意思是說當 Git 往前推進一個 Commit 的時候,它所在的分支也會跟著往前移動。

3. git reflog

reflog 的意思刷新日誌

Head 移動的時候(切換分支、commit...) Git 就會在 Reflog 上做紀錄,所以只要在 Terminal 上輸入 git reflog 就可以看到之前 commit 的記錄,如果平常 commit message 寫的仔細的話,透過搜尋,很快的就可以找到 commit 對應的 SHA 值。

4. cherry pick ?

取得 SHA 值,剩下的就簡單了,cherry pick 的功能是將 commit 撿起來做合併,所以我們只要在開發的 branch 上新開一個分支,使用 cherry pick [SHA] 就可以把不小心刪掉的 commit 撿回來了,找回失去的記憶就是這麼簡單~

參考資料

【狀況題】不小心把還沒合併的分支砍掉了,救得回來嗎?
【冷知識】HEAD 是什麼東西?
【狀況題】不小心使用 hard 模式 Reset 了某個 Commit,救得回來嗎?
【狀況題】如果你只想要某個分支的某幾個 Commit?

延伸閱讀

【冷知識】標籤跟分支有什麼不一樣?


上一篇
FP Functional Programing
下一篇
RegExp
系列文
那些我還沒深入理解就開始使用的東西30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言