如何在 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+ 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告