使用 --hard 標誌撤消 Git 重置
有時你可能希望將更改重置為特定的提交。假設你選擇了 git reset --hard <commit id>
方式來重置更改,但忘記了 --hard
標誌會丟棄本地系統上未提交的更改,後來才意識到錯誤。在這種情況下,你可以從不同的場景中恢復更改。
在本文中,你將找到根據不同情況撤消更改的方法。
有提交的更改,現在由於 git reset --hard
而消失
這種情況是最常見的情況之一,也是最容易恢復更改的情況。如果你執行 git reset --hard
並對倉庫進行了修改,請執行 git reflog <branchname
以列出該分支中所做的所有更改,包括重置。輸出可能看起來像這樣,
116daf4 dev@{0}: reset: moving to HEAD~
adf3a51 dev@{1}: commit: changed authentication method
4f7fa8c dev@{2}: commit: updated readme
5eb37ca dev@{3}: commit (initial): Initial Commit
現在,我們可以看到第一個日誌顯示我們已經重置了 dev
分支。現在,要恢復提交 dev@{1}
或 adf3a51
的更改,你可以執行命令,
git reset --hard adf3a51
它將撤消直到該提交的更改。
更改已暫存但未提交
恢復暫存但未提交的更改比上面的方法有點困難,但它仍然是可行的。首先,你可以使用 git fsck --lost-found
命令列出在使用命令 git reset --hard
之前懸空的所有提交雜湊。你可以使用 git show <commit_hash>
檢視提交雜湊的內容。現在你有了要重置的懸空提交雜湊,再次使用命令 git reset --hard <commit_hash
和檢索到的提交雜湊來獲得所需的提交。
更改既沒有提交也沒有暫存
如果你仍在閱讀並且偶然發現此方法,那麼可能無法撤消 git reset --hard
命令,因為 git 不會儲存你未新增或提交的更改。如果你參考 git reset
和 --hard
部分的文件,它會說,重置索引和工作樹。自 <commit>
以來對工作樹中跟蹤檔案的所有更改都將被丟棄。
由於似乎不太可能從該狀態恢復資料而沒有太多麻煩,因此最好不要出現這種情況並知道你將要使用的命令及其標誌。