一般用 sourceTree 刪除分支時都會問你要不要 force delete
用 CLI 時也會提醒你不要亂刪,要刪的話用 -D 強制刪除
但是有一天我還是一時失智,把還沒 merge,也沒推上 github 的分支刪除了
於是就有了這篇補救教學..
1. git reflog 找要回去的點
1 | $ git reflog |
尋找要取回的commit
- jk: 上下移動
- /keyword: 搜尋關鍵字
2. 拿回分支/把要的 commit 撿回
接著看你要不要把整個分支拿回,或是目前已經在新分支上了,想把刪除的 commit 撿回接上
整個分支拿回
首先記住要救回分支的最後一個 commit,並輸入下方指令
1 | $ git checkout -b <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