0%

[實用git系列]強制刪除分支後驚覺不對之終極補救教學

一般用 sourceTree 刪除分支時都會問你要不要 force delete

用 CLI 時也會提醒你不要亂刪,要刪的話用 -D 強制刪除

但是有一天我還是一時失智,把還沒 merge,也沒推上 github 的分支刪除了

於是就有了這篇補救教學..

1. git reflog 找要回去的點

1
$ git reflog

尋找要取回的commit

  • jk: 上下移動
  • /keyword: 搜尋關鍵字

2. 拿回分支/把要的 commit 撿回

接著看你要不要把整個分支拿回,或是目前已經在新分支上了,想把刪除的 commit 撿回接上

整個分支拿回

首先記住要救回分支的最後一個 commit,並輸入下方指令

1
2
3
$ git checkout -b <branchName> 0f3eb49 // 會切到新建的分支
// 或
$ git branch <branchName> 0f3eb49 // 不會切到新建的分支

接著神奇的事就發生了,被刪掉的 branch 出現了

其實此指令會建立新的 branch,且 commit 紀錄會是剛剛記住最後一個 commit,因此看起來就像是救回分支

撿要的 commit 到目前的分支中

若只是想將刪掉分支的某一 commit 內容複製到目前的分支上,那就可以使用 cherry-pick

1
$ git cherry-pick 0f3eb49

此時若有衝突就會要求你 merge 再 commit,若要撿多個 commit,就再下 cherry-pick 即可

參考文章

https://ithelp.ithome.com.tw/articles/10227305

https://gitbook.tw/chapters/branch/restore-deleted-but-unmerged-branch.html