如何在 Git 中使用 reset 命令撤銷錯誤的合併?
假設我們執行了一個合併提交,後來發現程式碼無法編譯或應用程式無法工作。如果我們在合併時犯了錯誤,就會發生這種情況。在這樣的情況下,我們需要使用以下任一方法撤銷合併:−
- reset 命令;或
- revert 命令
git reset 命令可用於撤消對 Git 儲存庫狀態的本地更改。git reset 將HEAD指標移動到給定的提交,並更新索引以匹配該提交。此命令會重寫提交歷史記錄。但是,如果我們已與其他團隊成員共享了我們的提交,或者如果我們已將程式碼推送到遠端儲存庫,則不應使用此方法。
考慮以下示例,其中儲存庫有兩個分支 - master 和一個特性分支。這兩個分支都已分叉,並且每個分支都有兩個提交。我們需要將提交(C3 和 C4)合併到 master 分支中。假設由於錯誤的合併導致專案編譯失敗。下圖顯示了這種情況。

讓我們使用“git reset –hard”命令解決此問題,將HEAD指標重置到 master 中的前一個提交(c2)。下圖顯示了這種情況。重置HEAD指標的命令將是
git reset --hard HEAD~1 //moves one step back

由於沒有對錯誤合併的引用,因此錯誤合併將被垃圾回收。
$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo $ git init Initialized empty Git repository in E:/tut_repo/.git/ $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ echo abc>abc.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git commit -m 'abc' [master (root-commit) 91773ff] abc 1 file changed, 1 insertion(+) create mode 100644 abc.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git branch feature $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git switch feature Switched to branch 'feature' $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature) $ echo lmno>lmno.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature) $ git commit -m 'lmno' [feature e1c99eb] lmno 1 file changed, 1 insertion(+) create mode 100644 lmno.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature) $ git switch master Switched to branch 'master' $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git log --oneline --all --graph * e1c99eb (feature) lmno * 91773ff (HEAD -> master) abc $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ echo mh>mh.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git commit -m 'mh.txt' [master 862ce37] mh.txt 1 file changed, 1 insertion(+) create mode 100644 mh.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git log --oneline --all --graph * 862ce37 (HEAD -> master) mh.txt | * e1c99eb (feature) lmno |/ * 91773ff abc $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git merge feature hint: Waiting for your editor to close the file... unix2dos: converting file E:/tut_repo/.git/MERGE_MSG to DOS format... dos2unix: converting file E:/tut_repo/.git/MERGE_MSG to Unix format... Merge made by the 'recursive' strategy. lmno.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 lmno.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git log --oneline --all --graph * 8216241 (HEAD -> master) Merge branch 'feature' |\ | * e1c99eb (feature) lmno * | 862ce37 mh.txt |/ * 91773ff abc $ git reset --hard HEAD~1 HEAD is now at 862ce37 mh $ git log --oneline --all --graph * 862ce37 (HEAD -> master) mh.txt | * e1c99eb (feature) lmno |/ * 91773ff abc
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP