解决合并冲突
了解为什么会产生冲突,以及如何正确地解决它们。
这是一个交互式课程,需要在 GitHub 上实际操作来完成学习。本页面为静态预览,仅方便您一次性阅读所有步骤内容。
前往 GitHub 开始学习 →课程概览
English | 中文
本课程翻译自 Github Skills,全部课程请点击 这里查看
解决合并冲突
了解为什么会产生冲突,以及如何正确地解决它们。
Welcome
当两个人在 GitHub 上修改同一份文件时,就有可能出现 合并冲突 问题。这在多人协同开发中非常常见。虽然解决冲突有时需要沟通和协调,但其实并没有想象中那么复杂。
本课程将带你一步步学习如何定位并解决合并冲突,让团队开发工作顺利进行。
- 目标人群:初学者、GitHub 新用户、Git 新手、学生、管理者及团队成员。
- 学习内容:什么是合并冲突、如何解决冲突、以及怎样减少冲突的发生。
- 您将完成:在课程中,我们将一起操作一个简短的 Markdown 简历文件。
- 先决条件:建议先学习 GitHub 入门课程。
- 课程时长:大约 30 分钟内即可完成。
在本课程中,你将完成以下内容:
- 创建一个 Pull Request
- 解决一次合并冲突
- 人为制造一个合并冲突
- 合并你的 Pull Request
如何开始课程
- 右键点击 Start course,在新标签页中打开链接。
- 在新页面中根据系统提示新建一个仓库。
- 仓库名称、描述这些字段系统已经帮我们自动填充好了,您可以按需修改。
- 建议选择公开仓库,因为私有仓库有GitHub Actions 分钟数限制。
- 最后点击 Create repository 按钮
- 仓库创建完毕后,等待大约 20 秒(等待Action执行),然后刷新页面。注意是刷新您仓库的页面,不是本课程的页面。如果页面没有变化,请继续等待。然后按照 README 中的步骤一步步进行。
课程步骤

Step 1: 创建 Pull Request
欢迎来到 "Managing Merge Conflicts" 课程! 👋
什么是 合并冲突(merge conflict) ?: 当两个不同分支中,对同一个文件的同一部分进行了修改时,就会产生 合并冲突。 通常,我们会在创建 Pull Request 时发现这些冲突,所以接下来就先从创建一个 Pull Request 开始吧。
⌨️ 实操环节: 创建 Pull Request
- 打开一个新的浏览器标签页,方便一边操作一边阅读本教程。
- 我们已经在仓库的
my-resume分支中做了一点修改。 - 创建一个 Pull Request,将
my-resume设为 head 分支,main设为 base 分支。Pull Request 的标题和内容可以填写为Resolving merge conflicts。 - 等待大约 20 秒后,刷新本页面。GitHub Actions 会自动检测进度并进入下一步。

Step 2: 解决合并冲突
现在我们来深入看看合并冲突是怎么回事吧! 🔍
第一次看到合并冲突时可能会令人生畏,但不用担心,Git 在处理冲突时比你想象的聪明。它只是在某些情况下需要人工干预,告诉它该保留哪些内容、该舍弃哪些。 有时我们需要将两个分支的内容都合并在一起,有时候你可能需要完全重写一个版本。这就是为什么需要人来查看冲突内容,并做出正确修改。
⌨️ 实操环节: 解决合并冲突
打开你刚刚创建的 Pull Request,我们已经为你准备好了一个冲突示例。别慌,这正是练习的重点!
在页面底部的提示区域中,找到 “This branch has conflicts that must be resolved” 字样,然后点击 Resolve conflicts 按钮。
你会看到一些高亮的标记区域,冲突部分会以
<<<<<<< my-resume开头,以>>>>>>> main结尾。这些标记是 Git 自动加上的,用来告诉你两边的代码哪里有冲突。删除 main 分支中的修改内容,也就是删除
=======下面、>>>>>>> main上面的所有内容。接着,把下面几行合并标记也删掉:
<<<<<<< my-resume ======= >>>>>>> main删除完冲突标记后,点击 Mark as resolved。
最后,点击 Commit merge。
等待大约 20 秒后,刷新当前页面。GitHub Actions 会自动识别进度并进入下一步。

Step 3: 动手创建一个合并冲突
太棒了!你已经成功解决了一次合并冲突! 🎉
不过在 GitHub 上,解决冲突后并不会自动完成合并。 GitHub 会把你的修改保存成一次 合并提交(merge commit)。
当我们解决冲突时,GitHub 实际上执行的是一种叫 反向合并(reverse merge) 的操作。
也就是说,它会把 main 分支的改动合并进你的 my-resume 分支,而不是反过来。
这样只有 my-resume 分支会更新,你可以先在自己的分支上测试修改,确认没问题后再合并回 main。
现在,让我们来点 “挑战性的” 练习吧。
⌨️ 实操环节
为了方便练习,我们将人为的制造一次合并冲突。我们已经在 main 分支中新增了一个文件 references.md,并推送到了远程仓库,但还没有同步到你的 my-resume 分支。
- 切换到
my-resume分支。 - 点击 Add file 下拉菜单,选择 Create new file。
- 创建一个名为
references.md的文件。 - 在
references.md文件中输入一些与main分支中不同的内容(这样才能产生冲突)。 - 滚动到页面底部,为本次修改输入提交信息(commit message)。
- 点击 Commit new file 按钮,确保选中 “Commit directly to the
my-resumebranch”。 - 等待大约 20 秒后,刷新当前页面。GitHub Actions 会自动检测进度并跳转到下一步。

Step 4: 合并你的 Pull Request
快完成啦! ❤️
现在,你已经可以合并(merge)你的 Pull Request 了!
⌨️ 实操环节: 合并你的 Pull Request
- 首先,确保 Pull Request 中的所有冲突都已经解决。
如果不确定怎么做,可以回顾第一步的操作说明。
- 点击 Merge pull request 按钮,执行合并操作。
- (可选)删除分支
my-resume。 - 等待大约 20 秒后,刷新当前页面。GitHub Actions 会自动检测进度,并进入下一步。

完成
恭喜你!你已经顺利完成了本课程!
下面是你在本课程中完成的内容回顾:
- 了解了合并冲突产生的原因。
- 学会了解决一次简单的合并冲突。
- 自己动手创建了一个冲突,并成功解决它!
接下来可以做什么?
- 试着用 GitHub Pages 搭建你自己的 Markdown 简历网站!可以在我们的 GitHub Pages 课程 中学习如何操作。
- 欢迎在讨论区分享你对本课程的想法和体验。
- 继续学习其他 GitHub Skills 课程。
- 阅读 GitHub 入门文档,深入了解更多基础知识。
- 想参与开源项目?可以在 GitHub Explore 上发现有趣的项目并开始贡献。