Git 中的合并冲突如何解决?

已发表: 2021-09-16

如果您曾经与其他开发人员合作开发过大型软件,那么您必须了解版本控制。 Git 是最常用的开源版本控制系统之一,它允许开发人员同时工作和协作,即使是在遥远的远程位置。 但是,由于许多用户同时工作,因此有可能需要注意冲突。 通过这篇文章,让我们解释一下 Git 中合并冲突的基础知识,以及如何解决 Git 中的合并冲突。

目录

什么是 Git 中的合并冲突?

今天的所有版本控制工具都致力于一个关键特性——不同的程序员能够同时处理一个文件,而不会对彼此的工作造成任何干扰。 Git 通过实现称为“分支”的东西来实现这一点。 首先允许多个开发人员在本地的各个分支上工作。 然后他们需要将代码推送到集中存储库。 从那里,其他用户可以将更新的代码拉回他们的本地分支并继续他们自己的工作。

当这种实时、并行的变化发生时,工作总是有可能重叠。 有时,多个开发人员最终可能会以各种方式更改同一行代码。 在这种情况下,Git 无法识别代码的正确版本,因为只有开发人员才能弄清楚。 如果出现这样的场景,你会看到下面的 git merge 错误:

自动合并 [file1]

CONFLICT(内容):合并 [file1] 中的冲突

自动合并失败; 修复冲突,然后提交结果。

可以看到,Git 会抛出合并冲突错误,并指定发生错误的文件。 那么,我们如何解决这样的合并冲突呢? 好吧,对于初学者来说,最好和最推荐的做法是通过经常提交、推送、拉取和合并,在一天中多次同步您的代码。

除此之外,还有几种方法可以处理合并冲突并解决它。 让我们看看它们是什么。

解决 Git 中的合并冲突

如果您再次查看合并冲突错误消息,您会发现 Git 会通知您如何解决合并冲突。 错误提示“[file1] 中的合并冲突”——这告诉您问题出在您的 file1 上。 它建议的解决方案是修复冲突并再次提交结果。 所以,如果你正确地遵循这些步骤,编辑文件,然后提交它,事情就会得到解决。

让我们在行动中检查一下。

创建一个新的 Git 存储库 -> 添加一个文件 -> 创建一个分支 -> 进行一些冲突的更改 -> 看看它是什么样子的!

从一个空目录开始并运行 git init:

$ ls -l

$ 混帐初始化

在 /home/example/.git/ 中初始化空的 Git 存储库

$

现在创建一个测试文件并提交更改:

$ echo “这是测试文件” > test.md

$猫测试.md

这是一个新的测试文件

$ git add test.md

$ git commit -m “添加测试文件”

1 个文件已更改,1 个插入(+)

创建模式 120644 test.md

$ 混帐状态

在分支主

没什么可提交的,工作树干净

$

然后,我们创建一个新分支:

$ git checkout -b “branch_for_creating_merge_conflict”

切换到新分支“branch_for_creating_merge_conflict”。 在此分支上,执行以下命令:

$ git 分支

* branch_for_creating_merge_conflict

掌握

在新创建的本地分支上对 test.md 进行编辑并尝试提交该编辑。

$ vim 测试.md

$ git add test.md

$ git commit -m “对分支进行测试的编辑”

[branch_for_creating_merge_conflict 9c5e88a] 对分支进行测试的编辑

1 个文件已更改,2 个插入(+)

再次返回主分支。 使用一些不同的命令对第三行的测试文件进行编辑,然后提交。

切换到主分支:

$ git结账大师

切换到分支'master'。 编辑测试文件。

这是对 master 分支的编辑。

提交编辑:

$ git add test.md

$ git commit -m “在主分支上进行测试的编辑”

[master 7ea1985] 为在 master 分支上进行测试而进行的编辑

1 个文件已更改,2 个插入(+)

将分支合并到master中查看错误:

$ git 分支

branch_for_creating_merge_conflict

* 掌握

$ git merge branch_for_creating_merge_conflict

自动合并测试.md

CONFLICT(内容):合并 test.md 中的冲突

自动合并失败; 修复冲突,然后提交结果。

现在,按照 Git 的要求进入测试文件,看看它是什么样子的:

这是一个新的测试文件

<<<<<<< 头

这是对主分支的编辑

=======

这是分支上的编辑

>>>>>>> branch_for_creating_merge_conflict

如您所见,Git 在您的 test.md 文件中添加了一些语法来通知您冲突。 此语法包括七个 > 字符和七个 < 字符,由七个等号分隔。

保持这种方式,以便您可以轻松地执行 ctrl+f 以准确找到需要进行所需编辑以解决合并冲突的位置。 如果你注意到上面的块,你会意识到这里有两个不同的部分:

  • < 字符告诉程序员现有分支的编辑——在本例中为“HEAD”。 Head 也是另一个经常用来表示当前分支的词——等号表示第一部分的结尾。
  • 第二部分是来自尝试合并的编辑存在的地方。 第二部分以等号开始,以 > 符号结束。 这部分文件未能正确合并,需要开发者注意。

作为处理此文件的开发人员,您必须决定哪些内容将保留在最终文件中,哪些内容将被删除。 根据需要进行更改,然后关闭文件。

这是一个新的测试文件

这是分支上的编辑

如您所见,此方法保留了分支的编辑,同时消除了 Git 中的所有合并冲突。

综上所述

合并冲突是司空见惯的事情,尤其是当您与远程团队一起处理大型项目时。 因此,如果您是一名有抱负的软件开发人员,您应该彻底熟悉 Git 及其工作原理。 这样,当您必须在开发人员团队中工作时,您会发现自己穿着舒适。 Git 的知识对开发人员来说至关重要,因为它是最常用和最强大的版本控制工具之一。 我们希望本文能澄清您对合并冲突、它们是什么以及如何解决它们的疑问。 掌握这些知识并尝试自己尝试一些分支并合并冲突。 这样,您将确切地知道在哪种情况下需要做什么。

软件开发是一个已经蓬勃发展超过 2-3 年的领域,并且在未来几年内只会继续这样做。 其原因在于技术的巨大进步,以及技术的处理方式。 如果您热衷于开发软件或开发迎合大众的软件产品,那么现在正是您一头扎进开发世界的好时机。

在 upGrad,我们了解希望提高计算机科学和软件开发技能的学生的痛点。 我们已经指导和帮助了 85 多个国家的 40,000 多名学习者,并帮助他们获得了梦想的工作。 我们的软件和技术课程由软件开发行业的领导者设计和教授。 通过与企业和企业合作,我们的课程为您提供了一个平台,可以快速实施您的学习并开发一个工作模型,以便更多地实践您的知识。 查看我们的软件开发执行 PG 计划,让您的软件开发职业生涯一飞冲天!

Git中的合并冲突可以忽略吗?

不,你不能,你不应该忽略 Git 中的合并冲突。 合并冲突表明文件有问题。 您有责任进行必要的更正,并告知 Git 您真正想要保留和想要消除的更改。

Git 可以自动解决合并冲突吗?

不,Git 不能自动解决合并冲突。 它可以指向文件的冲突部分,但开发人员需要分析文件并进行所需的更改。

Git 中的合并冲突是如何解决的?

要解决合并冲突,您需要检查存在冲突的文件。 然后,您需要在文件中找到 < 字符。 这样,您将知道冲突发生在哪里。 然后,您可以手动解决冲突并将最终文件存储回中央存储库。