在 Git 的倉庫中恢復到以前的提交

Azhar Bashir Khan 2023年1月30日
  1. 使用 git reset 重置到 Git 倉庫中的先前提交
  2. 使用 git revert 恢復到 Git 倉庫中的先前提交
在 Git 的倉庫中恢復到以前的提交

在本教程中,我們將學習如何在 Git 的倉庫中恢復到以前的提交。

Git 是一個版本控制系統,用於協作開發環境中以跟蹤對檔案所做的更改。

Git 用於捕獲專案目錄中檔案更改的快照,並將它們與提交相關聯。

在 Git 中,使用提交可以瀏覽和檢視對檔案所做更改的歷史記錄。

我們還可以使用 Git 將 Git 倉庫中專案目錄的檔案重置或恢復到先前的提交(即)在建立提交時目錄中檔案的狀態。

我們現在將用一個例子來說明這一點。

使用 git reset 重置到 Git 倉庫中的先前提交

在協作開發環境中,我們使用 Git 來跟蹤對 Git 倉庫中專案目錄中的檔案所做的更改。

當我們建立一個提交來儲存我們的工作時,Git 會建立一個唯一的 ID(也稱為 SHA雜湊),它允許我們記錄提交的特定更改以及提交的人員和時間。

提交是對檔案(或檔案集)的單獨更改。提交通常包含提交訊息,該訊息是對所做更改的簡要描述。

有時,我們可能需要將專案目錄的倉庫恢復或重置為以前的提交。

假設我們有以下提交,如我們的倉庫中的 git log 命令所示。

$ git log --oneline
e4cd6b4 (HEAD -> main, origin/main) my change
99541ed second change
41f1f2a first change
...

現在,假設我們要將倉庫重置為 SHA 41f1f2a 給出的先前提交,並帶有註釋 first change

一種方法是使用 git checkout 命令臨時切換到上一個提交。

因此,我們將執行以下操作。

$ git checkout 41f1f2a

我們還可以使用之前的提交建立一個新分支,這樣我們就可以在該分支中提交新的更改。

因此,我們將執行以下操作。

$ git checkout -b first-change-branch 41f1f2a

相反,如果我們想放棄自上次提交以來的更改,我們將使用 git reset 命令。

將倉庫重置回之前提交的 git reset 命令的語法是 git reset -hard <commit-sha-id>

因此,在我們的案例中,我們將執行以下操作。

$ git reset --hard 41f1f2a

請注意謹慎使用;這也將丟棄任何本地修改。任何未提交的更改都將丟失。

或者,我們可以在重置之前儲存更改,如下所示。

$ git stash
$ git reset --hard 41f1f2a
$ git stash pop

執行上述命令後,本地修改儲存在 stash 中;然後,在重置為上一次提交後,這些修改將重新應用於倉庫。

使用 git revert 恢復到 Git 倉庫中的先前提交

當我們想要保留倉庫的歷史記錄時,使用 git revert 命令。

執行命令 git revert 後,Git 會建立一個帶有反向補丁的提交以使之前的提交無效。這樣,我們就不會重寫任何歷史。

將倉庫恢復到以前的提交的 git revert 命令的語法是 git reset <commit-sha-id1> <commit-sha-id2> ...

因此,我們想要恢復前兩個提交以將倉庫恢復為 SHA 41f1f2a 給出的提交。

$ git revert e4cd6b4 99541ed

它將通過給定的兩個提交恢復倉庫。

我們也可以如下執行 git revert 命令。

$ git revert HEAD~2..HEAD

上面的 git revert 命令將恢復最後兩次提交。

最後,如前所述,git revert 命令建立一個提交以取消先前的提交。因此,我們現在需要儲存這個提交。

我們需要做如下。

$ git commit -m "reverted commits e4cd6b4 99541ed"

因此,現在提交的還原現在作為新提交儲存在倉庫中。

在某些情況下,存在合併提交,我們可能也想恢復它。

我們可以使用帶有選項 -m parent-numbergit revert 命令;此選項指定主線的父級編號(從 1 開始),並允許 revert 反轉相對於指定父級的更改。

合併提交有多個父級。git revert 命令需要額外的資訊來決定合併的哪個父級應被視為主線。

該命令的語法是,git revert -m 1 <commit-sha-id>1 用於作為主線的第一個父級。

因此,假設提交 SHA e4cd6b4 是合併提交。然後我們可以如下操作。

$ git revert -m 1 e4cd6b4

因此,我們詳細說明了如何在 Git 中恢復到倉庫中的先前提交。

欲瞭解更多資訊,請訪問下方。

  1. git-reset
  2. git-revert

相關文章 - Git Reset

相關文章 - Git Revert