Git 還原多次提交
Azhar Bashir Khan
2023年1月30日
在本教程中,我們將瞭解如何在 Git 中恢復多個提交。
在 Git 中,我們可能已經為某些功能開發完成了許多提交,或者提交了一些錯誤修復。
我們現在可能決定放棄這項工作。因此,要將倉庫恢復到完成這些更改之前的狀態,我們需要恢復已完成的多個提交。
我們可以使用 git revert
命令恢復 Git 中的多個提交。
恢復多個提交的另一種方法是使用 git reset
命令。
我們現在將用一個例子來說明它們。
使用 git revert
恢復 Git 中的多個提交
假設我們為一些錯誤修復做了多次提交。
我們可以在 Git 的日誌中看到這些提交,如下所示。
$ git log --oneline
17b787d bug3 fixed
1fefb57 bug2 fixed
8b3560b bug1 fixed
784065c feature1 developed
...
現在,我們決定放棄那些錯誤修復並將倉庫恢復到 bug1 fixed
狀態之前的狀態。
因此,我們可以使用帶有 --no-commit
選項的 git revert
命令。該命令的語法是 git revert --no-commit <commit>
。
因此,要恢復已完成的錯誤修復的三個提交,我們需要執行以下操作。
$ git revert --no-commit 17b787d784065c
$ git revert --no-commit 1fefb57
$ git revert --no-commit 8b3560b
因此,Git 中的倉庫現在處於提交 bug1 fixed
之前的狀態。
我們使用了提交的 sha1
名稱來還原每個提交。
我們需要在 Git 倉庫中提交工作樹的這種狀態,如下所示。
$ git commit -m "the fixes for bugs 1 2 3 reverted"
使用 git reset
恢復 Git 中的多個提交
假設我們在倉庫中有一些合併提交。那麼使用 git revert
的上述解決方案將不起作用。
在這種情況下,我們需要使用 git reset
命令。
因此,要在 Git 中使用 git reset
恢復多個提交,我們需要執行以下操作。
$ git reset --hard 784065c
$ git reset --soft ORIG_HEAD
$ git commit
因此,我們使用 git reset
命令將倉庫還原到提交歷史中緊接第一個錯誤修復之前的提交,即 784065c feature1 developed
。
因此,即使我們有一些合併提交,這也有效。