如何在 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,它將表明工作樹是乾淨的。

更新於:2021年4月30日

2K+ 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.