使用 --hard 標誌撤消 Git 重置

Ashok Chapagai 2023年1月30日
  1. 有提交的更改,現在由於 git reset --hard 而消失
  2. 更改已暫存但未提交
  3. 更改既沒有提交也沒有暫存
使用 --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> 以來對工作樹中跟蹤檔案的所有更改都將被丟棄。

由於似乎不太可能從該狀態恢復資料而沒有太多麻煩,因此最好不要出現這種情況並知道你將要使用的命令及其標誌。

作者: Ashok Chapagai
Ashok Chapagai avatar Ashok Chapagai avatar

Ashok is an avid learner and senior software engineer with a keen interest in cyber security. He loves articulating his experience with words to wider audience.

LinkedIn GitHub

相關文章 - Git Reset