Git 筆記:Reflog 操作與復原指南
後悔剛才的 Git 操作嗎? 使用 Reflog 吧!
假設我們搞砸了某些事,例如不小心撤銷重要 commit 或是 Rebase 時弄亂了history ,此時反悔還來得及,因為 Git 總是記錄著我們在 Repo 內的各種操作 (在哪條分支、做了哪些事...),因此可以透過 Git Reflog 指令來檢視我們的操作紀錄,並且用來恢復失誤的操作。
Reflog = Reference + Log
Reflog 只限於在本地端使用,而且會過期
Git總是記錄著我們在 Repo 內的各種操作,並將記錄存放在本地電腦 (Local) 的 . Git/logs 目錄內,也就是無法在遠端 (Remote) 透過 Reflog 來了解其他人在 Repo 內的 Git 操作紀錄。 此外,Reflog 會清除時間較久遠的紀錄 (約 90 天)。
檢視Git操作紀錄
git reflog show 或是 git reflog show HEAD 會列出在 HEAD 中的操作紀錄,其中 HEAD@{ 0 } 代表最新的操作, HEAD@{ } 內數字越大,代表時間越久遠。
若要檢視在特定分支上的紀錄,也可以輸入 git reflog show < branch-name > 。
Timed References
透過在 reference@{ } 內輸入時間點,並搭配 diff 、 checkout 等指令進行操作。
復原失誤的操作
要復原失誤的操作,首先可以先透過 git reflog show < reference > 來檢視該紀錄的位置 ( qualifier ,也就是 @ 內的數字),如下方示範如何將失誤的操作復原:
下方是 Git 最初的狀態:
假設我因為意外,不小心透過 git reset --hard 將 db727ba 後面的 commit 撤銷了 ( commit fb5072a 消失了)。
此時的我們可以透過 git reflog show master 檢視剛才的操作紀錄,其中 master@{1} 就是我們想要恢復的位置。
透過 git reset -hard master@{1} 恢復