通過提交 ID 恢復 Git 倉庫

John Wachira 2024年2月15日
  1. 臨時切換到 Git 提交
  2. 通過提交 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 命令並指明提交雜湊。

作者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

相關文章 - Git Reset