如何解决合并冲突?
我想我不是唯一一个这么说的人;在我职业生涯的早期,合并冲突简直就是我的心头大患(尤其是在 2019 年)。我于 2018 年从编程训练营毕业,那段时间里,如果遇到不知道如何修复的 git 问题,我就会创建一个新的仓库,然后重新开始。2019 年,我开始以软件工程师的身份与其他软件工程师团队合作,因此我无法创建新的仓库来避免这种不便。我不得不直面恐惧,解决合并冲突。毫不夸张地说,这种经历会让我泪流满面。请看下面的截图,这是我在 2019 年 7 月 14 日自嘲地讲解我处理合并冲突不当的经过。
幸运的是,现在我对解决合并冲突已经比较熟练了。虽然这仍然让我有点压力,但我还是掌握了一些小技巧来解决这个问题。
解决合并冲突的先决条件
呼吸

没关系。冲突总是会发生的。你不是第一个遇到合并冲突的人。无论资历如何,每个人都会经常遇到合并冲突。这在版本控制中很常见。
了解合并冲突发生的原因
像 Git 这样的版本控制系统可以自动管理代码贡献。它会识别更改的内容、更改时间、更改人以及更改行,以便开发人员轻松追踪其代码库的历史记录。然而,Git 有时会在以下情况下出现问题:
- 当多个人修改文件中的同一行并尝试将更改合并到同一个分支时
- 当一个开发人员删除一个文件,但另一个开发人员编辑该文件时,他们都尝试将他们的更改合并到同一个分支。
- 当一个开发人员删除一行,而另一个开发人员编辑该行,并且他们都尝试将他们的更改合并到同一个分支时
- 当开发人员挑选提交时,即从分支中挑选提交并将其应用到另一个分支的行为
- 当开发人员重新定位一个分支时,即将一系列提交移动到一个基本提交的过程
Git 不确定应该应用哪个更改,因此它会向开发人员寻求帮助,并通知他们合并冲突。您的工作是帮助 Git 确定哪个提议的更改最准确且最新。
解决合并冲突
在 Visual Studio Code(或您喜欢的 IDE)中
阅读日志
当您运行时git merge
发生合并冲突,您的终端或命令提示符将响应如下消息:
CONFLICT (content): Merge conflict in [filename]
此消息意味着此特定文件中发生了冲突。
找到冲突
导航到 Git 指出存在合并冲突的文件,并滚动浏览该文件,直到找到冲突。您的 IDE 可能会通过高亮显示对文件所做的冲突更改来指示合并冲突发生的位置。以下示例展示了 VS Code 如何高亮显示冲突的更改。VS Code 会高亮显示当前更改和即将发生的更改。
当前更改(有时称为传出更改)代表您在本地分支上所做的代码更改。
传入的更改代表您从基础分支拉入的代码更改或其他开发人员所做的修改。
决定需要应用哪些更改
决定是否接受当前更改、即将进行的更改或所有更改取决于您程序的最终目标。这部分取决于您、您对所需更改的了解以及您的团队。
如果您不确定要接受哪些更改,最好咨询编写这些更改的团队或开发者。您可以接受更改,而无需提交代码,并在本地测试程序以进行健全性检查。
删除任何残留的====
、<<<<
或>>>>
符号
这些符号用于帮助您确定合并冲突发生的位置。当您接受首选更改时,这些符号通常会消失,但有时由于故障,它们不会消失。如果这些符号仍然存在于文件中,您肯定不希望意外提交它们,因为这可能会在程序中造成错误。
如果我犯了错误怎么办?
如果您犯了错误或者不确定要接受哪个决策更改,您可以通过运行以下命令来停止合并过程:
`git merge -- abort`
完成这些之后,不要坐在那里沮丧。联系你的队友(最好是代码与你冲突的人,或者你信任的工程师),并解释一下情况:“嘿,我在合并代码时遇到了合并冲突。我不确定应该接受哪些更改。你有没有空陪我几分钟?”
如果您对已解决的合并冲突有信心,请提交更改
接受必要的更改并准备提交更改后,您可以采取以下步骤:
- 保存已更改的文件
- 运行
git status
以确保正确的文件被更改 - 运行
git add [file name]
以将您更改的文件添加到暂存区 - 运行
git commit -m “[add your commit message here]”
以提交您的更改 - 然后运行
git push
在 GitHub.com 上
确定哪些文件存在合并冲突
当你在 GitHub 上打开 PR 时,它会告知你存在合并冲突以及哪些文件存在冲突。
找到冲突
要查找冲突,请单击“解决冲突”,它将引导您找到存在冲突的文件。
决定需要应用哪些更改
GitHub Web UI 将使用黄色和以下符号突出显示冲突的更改:<<<<<
====,
>>>>
。
它还会指示这些更改来自哪个分支。这应该可以帮助您确定要接受哪些更改。
决定是否要使用来自您的分支、基础分支或两者的更改取决于您程序的最终目标。这部分取决于您、您对所需更改的了解以及您的团队。删除您不需要的行,保留您想要的行。
删除任何残留的====
、<<<<
或>>>>
符号
这些符号用于帮助您确定合并冲突发生的位置。您不希望意外提交这些符号,因为这会在您的程序中产生错误。
如果您对解决的合并冲突有信心,请提交更改。
删除冲突的更改和用于突出显示冲突更改的任何符号后,单击“标记为已解决”,然后单击“提交合并”按钮提交更改。
您可以在GitHub 的官方文档上阅读有关合并冲突及其解决方法的更多信息。
如果您还有其他问题,请在下方评论!如果您觉得有用,请分享这篇文章。
文章来源:https://dev.to/github/how-do-i-resolve-merge-conflicts-5438