如何在 Git 中中止合併衝突?
在進行合併時,你可能會遇到一個或多個衝突。現在,如果我們還沒有準備好處理這個衝突怎麼辦?也許你有很多衝突,而且你沒有足夠的時間來解決這些衝突。在這種情況下,我們可以很容易地回到開始合併之前的狀態。
要中止合併,我們可以使用以下命令:
$ git merge --abort
請注意,如果我們在解決一些衝突並將更改暫存後執行此命令,則這些更改將不會被儲存。一旦命令執行,我們就回到了乾淨的狀態,即開始合併之前的狀態。
我們可以從下圖理解這一點。有兩個分支,master 和 feature,每個分支都在操作同一個檔案。當我們將 feature 分支合併到 master 分支時,最終會遇到合併衝突錯誤。現在,如果我們中止合併衝突,我們將回到衝突之前的狀態,如圖所示。

示例
讓我們實際操作一下,瞭解如何中止合併衝突。
步驟 1 - 建立一個包含初始提交和 *hello.txt* 檔案的倉庫。
$ git init Initialized empty Git repository in E:/tut_repo/.git/ $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ echo hello>hello.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git commit -m 'hello.txt' [master (root-commit) d861f5f] hello 1 file changed, 1 insertion(+) create mode 100644 hello.txt
步驟 2 - 建立一個新的分支 *feature*。切換到 feature 分支,並透過編輯 *hello.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 hello feature >> hello.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature) $ git commit -m 'hello feature' [feature 4b2c833] hello feature 1 file changed, 1 insertion(+)
步驟 3 - 切換到 master 分支,並透過向 *hello.txt* 新增新行來執行新的提交。
$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature) $ git switch master Switched to branch 'master' $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ cat hello.txt hello $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ echo hello master>>hello.txt $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git add . $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git commit -m 'hello master' [master 6b1e9a4] hello master 1 file changed, 1 insertion(+)
步驟 4 - 現在我們將從 *feature* 分支合併更改到 *master* 分支。
$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git merge feature Auto-merging hello.txt CONFLICT (content): Merge conflict in hello.txt Automatic merge failed; fix conflicts and then commit the result. $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master|MERGING)
輸出顯示該分支處於合併的中間狀態,因為由於衝突導致自動合併失敗。
步驟 5 - 現在我們決定中止合併衝突。在中止之前,我們可以使用 git status 檢查倉庫的狀態。
$$ git status -s UU hello.txt
UU 狀態表示檔案 hello.txt 處於工作目錄和暫存區的未合併狀態。
步驟 6 - 最後,讓我們中止衝突
$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master|MERGING) $ git merge --abort $ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master) $ git status On branch master nothing to commit, working tree clean
從輸出可以看出,中止合併後,(master|MERGING) 已更改為 (master)。
此外,如果我們檢查 git status,它將表明工作樹是乾淨的。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP