還原遺失的 Git Commit
前言:
在 Git 裡頻繁且大量的新增或刪除 Commit 是常有的事,也難免會有些疏失,如果是不小心加入不相關的 Commit,還算是好解決,但萬一不小心刪除,或是不小心遺失了某個重要的 Commit,該怎麼辦呢?除了重新上一個內容一樣的 Commit之外,有沒有其他補救方法呢?
前情提要:
我們先依照下列步驟製造出一個類似的場景
接著我們將捨棄最新的一個 Commit,並將修改還原為上一個 Commit 的狀態
如上圖所示,此時的 abc.txt 裡面沒有字串"ghighi",如果我們想再一次加入字串"ghighi",或者說我想更精準的要求,必須找回剛剛捨棄的那個 Commit 並且將它還原呢?
Git Reflog:
答案是使用 git reflog 指令,其實大部分透過 Git 指令的操作,都會紀錄在本地端的倉庫裡,其中包含了 Commit 歷史紀錄,因此 git reflog 非常適用於現在的情況,它會列出本地端目前紀錄過的 Commit,從中找到你想還原的 Commit,透過 Reset 或 Cherry-Pick 將其還原即可!
按照上面步驟完成之後,就可以看到剛剛捨棄的 Commit 已經被復原,同時檔案也回復到有字串"ghighi"的狀態囉!
參考資料:
[StackOverflow]How can I recover a lost commit in Git?
在 Git 裡頻繁且大量的新增或刪除 Commit 是常有的事,也難免會有些疏失,如果是不小心加入不相關的 Commit,還算是好解決,但萬一不小心刪除,或是不小心遺失了某個重要的 Commit,該怎麼辦呢?除了重新上一個內容一樣的 Commit之外,有沒有其他補救方法呢?
前情提要:
我們先依照下列步驟製造出一個類似的場景
$ touch abc.txt
$ vim abc.txt ==> 加入字串 defdef
$ git add .
$ git commit -m "defdef"
$ vim abc.txt ==> 加入字串 ghighi
$ git add .
$ git commit -m "ghighi"
$ vim abc.txt ==> 加入字串 defdef
$ git add .
$ git commit -m "defdef"
$ vim abc.txt ==> 加入字串 ghighi
$ git add .
$ git commit -m "ghighi"
接著我們將捨棄最新的一個 Commit,並將修改還原為上一個 Commit 的狀態
$ git reset HEAD~ ==> 捨棄最新一個 Commit
$ git checkout -- abc.txt ==> 取消修改
$ git checkout -- abc.txt ==> 取消修改
如上圖所示,此時的 abc.txt 裡面沒有字串"ghighi",如果我們想再一次加入字串"ghighi",或者說我想更精準的要求,必須找回剛剛捨棄的那個 Commit 並且將它還原呢?
Git Reflog:
答案是使用 git reflog 指令,其實大部分透過 Git 指令的操作,都會紀錄在本地端的倉庫裡,其中包含了 Commit 歷史紀錄,因此 git reflog 非常適用於現在的情況,它會列出本地端目前紀錄過的 Commit,從中找到你想還原的 Commit,透過 Reset 或 Cherry-Pick 將其還原即可!
$ git reflog ==> 找到欲還原的 Commit ID
$ git reset --hard <commit-id>
or git cherry-pick <commit-id>
$ git reset --hard <commit-id>
or git cherry-pick <commit-id>
按照上面步驟完成之後,就可以看到剛剛捨棄的 Commit 已經被復原,同時檔案也回復到有字串"ghighi"的狀態囉!
參考資料:
留言
張貼留言