在 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-number
的 git revert
命令;此選項指定主線的父級編號(從 1 開始),並允許 revert 反轉相對於指定父級的更改。
合併提交有多個父級。git revert
命令需要額外的資訊來決定合併的哪個父級應被視為主線。
該命令的語法是,git revert -m 1 <commit-sha-id>
,1
用於作為主線的第一個父級。
因此,假設提交 SHA e4cd6b4
是合併提交。然後我們可以如下操作。
$ git revert -m 1 e4cd6b4
因此,我們詳細說明了如何在 Git 中恢復到倉庫中的先前提交。
欲瞭解更多資訊,請訪問下方。