如何在 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,它将表明工作树是干净的。