解决合并冲突

了解冲突产生的原因以及如何解决冲突。

Welcome

当两个人对 GitHub 上的同一份文件进行修改时,就会发生merge冲突,这在多人协同工作中非常常见。 虽然解决差异需要一些讨论,但冲突并不可怕,本课程将指导您寻找最佳的合并冲突解决方案。

  • 目标人群:开发者、GitHub 新用户,Git新人,学生,管理者,团队

  • 课程目标:认识什么是合并冲突,以及如何减少和解决冲突

  • 你将构建:本节我们将使用一个简短的Markdown简历

  • 前置条件:开始之前,推荐先学习我们的GitHub快速入门课程

  • 学习时长:小于30分钟

本课程,您将

  1. 创建一个拉取请求

  2. 解决合并冲突

  3. 创建一个合并冲突

  4. 合并你的拉取请求

如何开始

start-course
  1. 右键点击上方 Start course 按钮

  2. 在新页面中根据系统提示新建一个仓库。

    • 仓库名称、描述这些字段系统已经帮我们自动填充好了,您可以按需修改。
    • 建议使用选择公共仓库,因为私有仓库 GitHub Action有免费额度限制
    • 最后点击 Create repository 按钮
  3. 仓库创建完毕后,等待大约 20 秒(等待Action执行),然后刷新页面。注意是刷新您仓库的页面,不是本课程的页面。如果页面没有变化,请继续等待。

步骤1:创建一个拉取请求

什么是合并冲突(merge conflict)?: 当在两个不同分支上对同一文件的相同部分进行修改时,就会发生合并冲突。 我们经常会在拉取请求中遇到冲突,因此让我们从创建一个拉取请求开始。

⌨️ 动手

  1. 我们已提前为您创建了一个分支 my-resume,并对文件resume.md做了一些小的修改
  2. 现在到 Pull requests tab 页创建一个拉取请求,base选main,compare选my-resume。标题和描述可以填Resolving merge conflicts
  3. 等待大约20秒,然后刷新页面。GitHub Actions 将自动更新到下一步。

步骤2: 解决合并冲突

这可能会令人生畏,但不用担心,Git 在merge方面比你想象的聪明。

⌨️ 动手

  1. 打开你刚创建的PR,我们已经为您创建了一个“冲突”,不要怕

  2. 滑到页面底部,在 “This branch has conflicts that must be resolved” 下面,点击 Resolve conflicts 按钮

  3. 我们找到以 <<<<<<< my-resume 开头,以 >>>>>>> main 结尾的部分。这段标记是由Git添加的,表明冲突的内容。======= 是分隔符,上面部分是my-resume的内容,下面部分是main的内容

  4. 比如我们要删除main分支中的内容,保留my-resume分支的修改。则删除 =======>>>>>>> main 之间的内容

  5. 最后我们还需要删除冲突标记符号,表示我们已经解决了冲突。删除下面的行:

    <<<<<<< my-resume
    =======
    >>>>>>> main
    
  6. 冲突解决后点击 Mark as resolved

  7. 最后点击 Commit merge

  8. 等待大约20秒,然后刷新页面。GitHub Actions 将自动更新到下一步。

步骤3:创建你自己的冲突

干的漂亮,您解决了一个合并冲突!🎉

冲突解决后,GitHub不会自动合并拉取请求,它会创建一条merge commit记录,和我们前面一样需要点一下 "Merge pull requests"。

为了解决冲突,GitHub 执行所谓的反向合并(reverse merge)。 也就是说会把main分支的修改合并到您的 my-resume 分支中。 通过反向合并,仅更新 my-resume 分支。 这使我们在将代码合并到主分支之前进行充分的测试,而不会影响主分支。

OK,下面我们故意创建一个冲突

动手:创建冲突

我们已在main分支中为您添加了一个 references.md 文件,没有修改my-resume分支。现在需要您:

  1. 切到 my-resume 分支

  2. 点击 Add file,然后点击创建文件 Create new file

  3. 新建文件名为 references.md

  4. 随便输入一些与我们在main分支中为references.md添加的内容冲突的文本

  5. 点击提交按钮。请确保选择了”Commit directly to the my-resume branch“

  6. 等待大约20秒,然后刷新页面。GitHub Actions 将自动更新到下一步。

步骤4:合并您的拉取请求

现在您可以合并您的拉取请求了

⌨️ 动手

  1. 首先解决我们刚刚”创建“的冲突

    如果您需要帮助,请回顾步骤2

  2. 冲突解决后,点击Merge pull request开始合并

  3. 删除my-resume分支(可选)

  4. 等待大约20秒,然后刷新页面。GitHub Actions 将自动更新到下一步。

完成

恭喜您完成了本课程!

课程回顾:

  1. 您了解了为什么会发生合并冲突。
  2. 您解决了一个简单的合并冲突。
  3. 您创建了一个合并冲突,并解决了它!