在 Git 中恢復合併提交

Abdul Jabbar 2023年1月30日 2022年4月22日
  1. 撤銷未推送的 Git 提交
  2. 恢復已推送的 Git 提交
在 Git 中恢復合併提交

有時,我們需要合併兩個或多個分支,然後將提交推送到所需的分支。但是後來我們意識到我們不需要在那個倉庫中進行合併,所以這裡的問題是如何撤消或恢復已經推送的合併提交。沒什麼可擔心的。對於這個問題,Git 有一個很好的解決方案,我們將在下面討論。

根據問題的不同,有兩種處理這種情況的方法;一種是它尚未推送到倉庫但已提交。另一個是它被提交併推送到倉庫中。下面討論了這兩種情況:

撤銷未推送的 Git 提交

直接在 Git 中恢復提交是不可能的。儘管如此,我們需要在恢復之前檢查提交。還原後,現在工作目錄的位置與我們推送提交之前的工作目錄位置相同。

我們現在可以應用 git reset 命令將索引指標移回它的位置,即提交之前的位置。例如,如果我們想保留提交 Commit1Commite3 的更改,但恢復提交 Commit2 的更改,請執行此命令。

git reset HEAD~3

此命令會將索引指標返回到提交 Commit2 之前的位置。還原提交後,我們需要再次將更改的檔案新增到工作目錄。例如,執行以下命令:

git checkout Commit1 
git add Commit1  
git checkout Commit3 
git add Commit3
git commit

之後,我們可以將提交 Commit1Commit3 推送到遠端倉庫。

git push

如果我們想合併兩個分支,然後恢復一個分支的更改,我們可以使用以下命令:

git merge --abort

該命令用於取消合併過程。之後,我們可以將更改還原到分支。如果我們想撤銷最後一次提交或多次提交的影響,本節討論的命令很有用。

但是,如果我們想撤銷最後兩次或更多次提交的影響,我們需要將工作目錄重置為最後一次提交之前的狀態。這是因為不可能直接恢復一個或多個提交。

恢復已推送的 Git 提交

在另一種情況下,如果我們已經將合併提交推送到遠端分支並且也推送了它,我們必須進行一個新的提交來恢復更改。我們將執行以下命令:

git revert -m 1 <merge-commit-hash>

這將開發一個新的提交,它將逆轉先前合併提交的更改。但是,這個新提交也將包含原始合併提交的所有更改,因此我們需要編輯提交訊息以表明這是一個還原提交。而我們提到的選項,-m 1 將告訴 Git 我們想要保留合併的分支。

revert command 不會改變工作樹。它只修改索引。revert command 還具有恢復提交的原始訊息的選項。在上面給出的示例中,-m 選項用於恢復提交的原始訊息。revert 命令還可用於從整合提交中恢復特定檔案。

當我們進行更改並決定不再希望保留該更改時,Git revert 是一個有用的工具,可以在我們的本地分支上使用。不建議在公共分支上使用。

眾所周知,git revert 是完全可逆的,不可能撤銷它的改變。如果我們在其分支上不是當前提交的提交上執行 git revert,我們必須非常小心,因為 git revert 將開發具有新提交 ID 的新提交。

如果我們稍後執行 git reset –hard 來恢復 git revert 所做的更改,我們還將刪除建立 git revert 撤消提交的開發人員所做的更改。可以在公共分支上使用 git revert,但根據我的觀點,這樣做不是一個好主意。最好開發一個新分支來進行更改,然後在完成後將其合併到 master 分支中。

如果我們想在公共分支上使用 git revert,請確保我們是唯一在該分支上工作的人,否則我們將撤消其他人的工作。

Author: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

相關文章 - Git Revert

相關文章 - Git Merge