迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 > Git >

解决 Git 中的合并冲突

作者:迹忆客 最近更新:2023/05/09 浏览次数:

在本文中,我们将演示如何解决在 Git 中合并两个分支时出现的冲突。

通常,协作团队环境中的不同团队成员通常对相同的文件进行工作。例如,一位从事某些功能开发的团队成员可能会编辑 README 文件以提供有关所开发功能的信息。

另一位致力于修复错误的团队成员可能会在同一个 README 文件中添加有关已修复错误的信息。他们可能在不同的分支上工作并在各自的分支中提交他们的更改。

有时,需要合并不同的分支以提供有凝聚力的构建。因此,在不同分支更新相同文件时,此操作会导致合并冲突。

然后需要解决冲突并合并更改。我们现在将通过一个例子来说明这一点。


使用 git mergetool 解决合并两个分支时出现的冲突

在解决合并冲突之前,我们应该设置 Git 使用的 diff 工具,如下所示。

$ git config merge.tool meld
$ git config merge.conflictstyle diff3
$ git config mergetool.prompt false

上面的命令将 meld 设置为默认的 diff 工具。此外,我们已将 conflictstyle 设置为 diff3;这将 diff 工具设置为显示两个文件的共同祖先(当前分支一和分支中要合并的分支)。

要查看支持的不同差异工具,请运行以下命令。

$ git mergetool --tool-help

现在,我们从示例开始演示如何解决冲突。假设我们有两个分支,如下所示。

$ git branch
* main
  feature1

第一个分支是 main 分支,第二个是名为 feature1 的功能开发分支。

我们在 main 分支中有一个 README.md 文件,其内容如下。

$ cat README.md
# Upwork
Upwork projects

如上所示,我们目前在 main 分支。然后,我们切换到 feature1 分支。

$ git checkout feature1
Switched to branch 'feature1'

$ git branch
  main
* feature1

我们更新 README.md 并打印其内容如下。

$ cat README.md
This is conflicting branch line.

现在,我们将 main 分支与 feature1 分支合并以获取该分支中的最新更改。

合并时,Git 显示合并冲突如下。

$ git merge main
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

我们可以通过以下方式获得有关冲突的更多信息。

$ git status
On branch feature1
You have unmerged paths.
  (fix conflicts and run "git commit")

Unmerged paths:
  (use "git add <file>..." to mark resolution)

	both added:      README.md

no changes added to commit (use "git add" and/or "git commit -a")

我们现在将打印文件 README.md 的内容,该文件存在冲突。

$ cat README.md 
<<<<<<< HEAD
This is conflicting branch line.

||||||| merged common ancestors
=======
# Upwork
Upwork projects
>>>>>>> main

该文件现在显示了各种符号。

符号 <<<<<<< 后跟 HEAD 是当前分支的别名。这表示此部分中编辑的开始。

======== 符号表示当前分支中修订的结束和新分支中编辑的开始。

符号 >>>>>>>> 后跟远程分支名称,即 main,显示尝试合并的位置。

现在,我们将使用 mergetool 来解决冲突。

$ git mergetool
Merging:
README.md

Normal merge conflict for 'README.md':
  {local}: created file
  {remote}: created file

这将启动 meld(因为我们已将其设置为默认差异工具)。请看下图。

git-mergetool-meld1

左窗格显示在本地分支中对文件 README.md 所做的编辑。中间窗格包含为解决冲突所做的更改结果。右窗格显示在远程分支(即我们要合并的分支)中的编辑内容,即 main

我们可以选择保留本地和远程更改或其中之一。我们将选择保持远程分支更改如下。

git-mergetool-meld2

然后我们将保存并退出 meld 工具。

我们将打印 README.md 文件并查看更新。

$ cat README.md
# Upwork
Upwork projects

我们现在将更改提交到 Git。

$ git commit -m "merged from main"
[feature1 3c39d7b] merged from main

我们现在将运行 git diff 命令来检查 feature1main 分支之间的冲突。

$ git diff feature1 main

我们将检查 feature1 分支的状态。

$ git status
On branch feature1

Untracked files:
  (use "git add <file>..." to include in what will be committed)

	README.md.orig

它显示了一个文件 README.md.orig,它是在合并时由 mergetool 创建的。

运行以下命令将其删除:

$ git clean -f

因此,我们已经成功解决了使用 Git 的 mergetool 合并两个分支时的冲突。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Windows 系统中卸载 git

发布时间:2023/04/09 浏览次数:223 分类:Git

在这篇简短的文章中,我们将学习如何卸载 Git,以及如何在从个人计算机的目录中卸载 Git 后删除这些文件。

如何检查 Git 的版本

发布时间:2023/04/09 浏览次数:160 分类:Git

在这篇检查Git最新版本的文章中,我们将学习如何在本地个人计算机或任何服务器上检查Git版本。

Git 如何重命名本地分支

发布时间:2023/04/09 浏览次数:64 分类:Git

大多数情况下,重命名分支机构是由于上述情况。 因此,在本教程中,我们将学习使用下面提到的技术更改本地 Git 分支的名称。

重命名 Git 存储库中的文件和目录

发布时间:2023/04/09 浏览次数:102 分类:Git

在本文中,我们将讨论 git 中的重命名过程。 我们使用 Git Rename 来更改工作目录中文件和文件夹的名称。

在 Git 中取消初始化存储库

发布时间:2023/04/09 浏览次数:187 分类:Git

本本文介绍如何通过 Git 命令行取消初始化 Git 存储库。git init 命令开发一个新的空置 Git 存储库。 它还用于重新初始化已经存在的 Git 存储库。

Git 仓库名称该如何命名

发布时间:2023/04/09 浏览次数:208 分类:Git

使用 Git 时,选择一个简洁且最新的存储库名称是一项艰巨的任务。本教程介绍了如何以独特的方式命名 Git 存储库。

配置 Git 以忽略文件模式更改

发布时间:2023/04/09 浏览次数:67 分类:Git

本文讨论配置 Git 以忽略文件更改 chmod 所需的步骤。 如果您更改 Git 正在跟踪的文件的权限,系统将在该文件中注册更改。

在 Git 中暂存已删除的文件

发布时间:2023/04/09 浏览次数:93 分类:Git

本文讨论了在 Git 中暂存已删除文件的必要步骤。我们知道 rm 命令可以删除一个文件,而无需将其从工作目录中移除。 那么,我们如何暂存已删除的文件以进行提交呢?

在 Git 中显示冲突文件

发布时间:2023/04/09 浏览次数:139 分类:Git

本文讨论在 Git 中列出冲突文件的最简单和最干净的方法。 我们可以使用 git status 命令,但这很麻烦,尤其是当我们有大量不冲突的文件时。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便