HOWTO · Git

通過提交 ID 恢復 Git 倉庫

你可以根據提交 ID 還原 Git 倉庫。

本頁內容

本文將討論基於提交 ID 還原 Git 倉庫。我們可能需要回到較舊的提交以檢查其狀態或刪除之後的提交。

讓我們討論這兩種情況。

臨時切換到 Git 提交

我們使用 git checkout 命令臨時切換到較舊的提交,同時提及提交 ID。

$ git checkout <Commit ID>

此命令將分離我們的 repo 的 HEAD(我們沒有在分支上籤出)。在這種狀態下,我們無法提交。

如下所示,我們必須根據提交建立一個新的分支。

$ git switch -c <new-branch-name>

我們可以結合上面的命令來做同樣的事情,如下所示。

$ git checkout -b <new-branch-name> <Commit ID>

通過提交 ID 恢復 Git 倉庫

我們使用帶有 --hard 標誌的 git reset 命令,同時傳遞我們想要回滾到的提交 ID。執行以下命令。

$ git reset --hard <Commit ID>

執行此命令將刪除我們最近的所有提交,直到提到的提交。該命令還將刪除索引中任何未提交的更改。

如果要保留更改,請執行以下操作:

$ git stash
$ git reset --hard <Commit ID>
$ git stash pop

如果要更新遠端倉庫,請使用下面的 git push 命令。

$ git push -f

請小心使用此命令,因為它將根據你的本地倉庫覆蓋遠端倉庫。讓我們看一個例子。

在下面的示例中,我們將嘗試根據提交 id 恢復我們的 git repo Delftscopetech。讓我們執行 git log 命令來列出我們 repo 中的所有提交。

$ git log --oneline

repo 歷史

如果我們想回到 Fourth Update,我們會怎麼做呢?

我們在下面的上下文中執行 git reset 命令。

$ git reset --hard df90895
HEAD is now at df90895 Fourth Update

輸出顯示我們的 HEAD 現在處於 Fourth Update。我們可以執行 git push 命令將更改推送到我們的遠端倉庫。

如果要撤消重置,請按照此操作。

首先,我們執行 git reflog 命令來檢視我們 repo 中的所有參考更新。

$ git reflog

git reflog

你的輸出看起來很相似。我們可以在 HEAD@{0} 看到我們的重置。

要返回,我們執行 git reset 命令,如下所示。

$ git reset HEAD@{1}

現在讓我們檢查一下我們的提交歷史。

$ git log --oneline

repo 歷史 2

我們的 HEAD 又回到了第六次更新。

簡而言之,根據提交 ID 恢復你的 Git 倉庫非常容易。如果你想暫時切換到提交,請使用 git checkout 命令。

要恢復到特定的提交,請使用 git reset --hard 命令並指明提交雜湊。