Git 可透過 resetrevert 來恢復前一個版本,在 commit 沒有 push 之前的話我通常都會使用 reset 來進行,而這次因為操作不熟悉而造成還沒 push 的 commit 遺失了,這時候要怎麼恢復?

Git 會把所有的操作紀錄都保留下來

Git 所有的操作都是在原先的紀錄上做修改,而且所有的紀錄都會留存下來。換句話說,你不管進行任何一種操作,Git 都有辦法讓你進行回滾。

執行 git reflog 即可看到所有操作紀錄

git reflog
9688fed HEAD@{0}: reset: moving to 9688fed
9688fed HEAD@{1}: reset: moving to HEAD
9688fed HEAD@{2}: reset: moving to HEAD^1
912851c (origin/develop, develop) HEAD@{3}: reset: moving to HEAD^1

※你可以加上參數 --stat 顯示異動的檔案。可支援的參數很多,如果想要獲得其他資訊,可以讀一下官方文件。

恢復被刪除的 commit

使用 git reset --hard <commit-id|HEAD> 可以將分支重設為指定的 commit 或是 HEAD(預設為最近一次的 commit)

注意:如果當下有未儲存的異動要先處理掉,不然會消失。(建議先用 git stash 先暫存起來)

git reflog 找到你想恢復的 commit id 後,執行下列指令即可恢復:

git reset --hard 551c724
HEAD is now at 551c724 tmp

Reference: 找回Git中丢失的Commit – 简书

留言