解决合并冲突
了解冲突产生的原因以及如何解决冲突。
Welcome
当两个人对 GitHub 上的同一份文件进行修改时,就会发生merge
冲突,这在多人协同工作中非常常见。
虽然解决差异需要一些讨论,但冲突并不可怕,本课程将指导您寻找最佳的合并冲突解决方案。
-
目标人群:开发者、GitHub 新用户,Git新人,学生,管理者,团队
-
课程目标:认识什么是合并冲突,以及如何减少和解决冲突
-
你将构建:本节我们将使用一个简短的Markdown简历
-
前置条件:开始之前,推荐先学习我们的GitHub快速入门课程
-
学习时长:小于30分钟
本课程,您将
-
创建一个拉取请求
-
解决合并冲突
-
创建一个合并冲突
-
合并你的拉取请求
如何开始
-
右键点击上方 Start course 按钮
-
在新页面中根据系统提示新建一个仓库。
- 仓库名称、描述这些字段系统已经帮我们自动填充好了,您可以按需修改。
- 建议使用选择公共仓库,因为私有仓库 GitHub Action有免费额度限制
- 最后点击 Create repository 按钮
-
仓库创建完毕后,等待大约 20 秒(等待Action执行),然后刷新页面。注意是刷新您仓库的页面,不是本课程的页面。如果页面没有变化,请继续等待。
步骤1:创建一个拉取请求
什么是合并冲突(merge conflict)?: 当在两个不同分支上对同一文件的相同部分进行修改时,就会发生合并冲突。 我们经常会在拉取请求中遇到冲突,因此让我们从创建一个拉取请求开始。
⌨️ 动手
- 我们已提前为您创建了一个分支
my-resume
,并对文件resume.md
做了一些小的修改 - 现在到 Pull requests tab 页创建一个拉取请求,base选
main
,compare选my-resume
。标题和描述可以填Resolving merge conflicts
- 等待大约20秒,然后刷新页面。GitHub Actions 将自动更新到下一步。
步骤2: 解决合并冲突
这可能会令人生畏,但不用担心,Git 在merge方面比你想象的聪明。
⌨️ 动手
-
打开你刚创建的PR,我们已经为您创建了一个“冲突”,不要怕
-
滑到页面底部,在 “This branch has conflicts that must be resolved” 下面,点击 Resolve conflicts 按钮
-
我们找到以
<<<<<<< my-resume
开头,以>>>>>>> main
结尾的部分。这段标记是由Git添加的,表明冲突的内容。=======
是分隔符,上面部分是my-resume
的内容,下面部分是main
的内容 -
比如我们要删除
main
分支中的内容,保留my-resume
分支的修改。则删除=======
和>>>>>>> main
之间的内容 -
最后我们还需要删除冲突标记符号,表示我们已经解决了冲突。删除下面的行:
<<<<<<< my-resume ======= >>>>>>> main
-
冲突解决后点击 Mark as resolved
-
最后点击 Commit merge
-
等待大约20秒,然后刷新页面。GitHub Actions 将自动更新到下一步。
步骤3:创建你自己的冲突
干的漂亮,您解决了一个合并冲突!🎉
冲突解决后,GitHub不会自动合并拉取请求,它会创建一条merge commit记录,和我们前面一样需要点一下 "Merge pull requests"。
为了解决冲突,GitHub 执行所谓的反向合并(reverse merge)。 也就是说会把main
分支的修改合并到您的 my-resume
分支中。 通过反向合并,仅更新 my-resume
分支。
这使我们在将代码合并到主分支之前进行充分的测试,而不会影响主分支。
OK,下面我们故意创建一个冲突
动手:创建冲突
我们已在main
分支中为您添加了一个 references.md
文件,没有修改my-resume
分支。现在需要您:
-
切到
my-resume
分支 -
点击
Add file
,然后点击创建文件Create new file
-
新建文件名为
references.md
-
随便输入一些与我们在
main
分支中为references.md
添加的内容冲突的文本 -
点击提交按钮。请确保选择了”Commit directly to the
my-resume
branch“ -
等待大约20秒,然后刷新页面。GitHub Actions 将自动更新到下一步。
步骤4:合并您的拉取请求
现在您可以合并您的拉取请求了
⌨️ 动手
-
首先解决我们刚刚”创建“的冲突
如果您需要帮助,请回顾步骤2
-
冲突解决后,点击Merge pull request开始合并
-
删除
my-resume
分支(可选) -
等待大约20秒,然后刷新页面。GitHub Actions 将自动更新到下一步。
完成
恭喜您完成了本课程!
课程回顾:
- 您了解了为什么会发生合并冲突。
- 您解决了一个简单的合并冲突。
- 您创建了一个合并冲突,并解决了它!