Git 通常能够自动解决分支之间的差异并进行合并。大多数情况下,修改发生在不同的行,甚至不同的文件中,这使得计算机能够轻松完成合并。然而,有时会出现竞争性的更改,Git 在没有你的帮助下无法解决。合并冲突常见于多人对同一文件的同一行进行不同修改,或一人编辑文件而另一人删除同一文件的情形。
在 GitHub 上合并拉取请求之前,必须先解决所有合并冲突。如果你的拉取请求的比较分支与基准分支之间出现合并冲突,系统会在 合并拉取请求 按钮上方列出所有存在冲突的文件。只有在你解决了比较分支与基准分支之间的全部冲突后,合并拉取请求 按钮才会被激活。
解决合并冲突
要解决合并冲突,你必须手动编辑冲突文件,挑选出希望保留在最终合并中的更改。有多种方式可以解决合并冲突。
-
如果合并冲突是由于竞争性的行更改引起的——例如在 Git 仓库的不同分支上,人们对同一文件的同一行做了不同修改——你可以在 GitHub 上使用冲突编辑器来解决它。详情请参见 在 GitHub 上解决合并冲突。
-
对于其他类型的合并冲突,你必须在仓库的本地克隆中解决冲突,然后将更改推送到 GitHub 上的分支。你可以使用命令行或 GitHub Desktop 等工具来推送更改。详情请参见 使用命令行解决合并冲突。
-
对于任何类型的合并冲突,如果你可以访问 Copilot 云代理且该仓库已启用,你可以在合并框中点击 使用 Copilot 修复,让 Copilot 为你解决冲突。Copilot 会分析冲突的更改、完成冲突解决,并验证构建、测试和代码检查仍然通过。详情请参见 让 GitHub Copilot 对已有拉取请求进行更改。
如果在命令行上遇到合并冲突,在本地电脑上解决冲突之前,你无法将本地更改推送到 GitHub。若在命令行上尝试合并存在冲突的分支,会收到错误信息。详情请参见 使用命令行解决合并冲突。
$ git merge BRANCH-NAME
> Auto-merging styleguide.md
> CONFLICT (content): Merge conflict in styleguide.md
> Automatic merge failed; fix conflicts and then commit the result