解决 Visual Studio 中的合并冲突

将一个分支合并到另一个分支时,一个分支中提交的文件更改可能会与其他分支中的更改冲突。 Git 尝试使用存储库中的历史记录来解决这些更改,以确定合并文件的外观。 如果不清楚如何合并更改,Git 将停止合并并告知哪些文件冲突。

防止合并冲突

只要文件内容在提交之间不会显著更改,Git 就善于在大多数情况下自动合并文件更改。 如果你的分支远远落后于主分支,请考虑在打开拉取请求之前对你的分支进行变基处理。 变基分支将合并到主分支中,而不会发生冲突。

解决合并冲突

  • 如果你在与其他人协作处理同一分支,则你在推送更改时可能会遇见合并冲突。

显示推送后的合并冲突的屏幕截图。

推送后合并冲突的屏幕截图。

  • Visual Studio 检测到你正在使用的本地分支是否位于其远程跟踪分支后面,然后提供可供选择的选项。

    本地分支位于远程分支后面时可用的选项的屏幕截图。

    注意

    如果远程存储库支持 强制推送,则可以使用 Git>设置启用它。

    在此示例中,选择“拉取然后推送”以添加引入远程存储库的更改。 如果在拉取更改或尝试合并两个分支时发生合并冲突,Visual Studio 会在 Git Changes 窗口、Git 存储库 窗口以及所有存在冲突的文件上通知你。

    合并冲突通知的屏幕截图。

  • “Git 更改”窗口在“未合并的更改”下显示存在冲突的文件列表。 若要开始解决冲突,请双击文件。 或者,如果在编辑器中打开了冲突的文件,则可以选择 打开合并编辑器

显示 Git 更改窗口中合并冲突状态的屏幕截图。

Git 更改窗口中合并冲突状态的屏幕截图。

  • 在合并编辑器中,使用以下任一方法开始解决冲突(如编号的屏幕截图所示):

    1. 逐行查看冲突,并通过选择复选框来选择保留左侧还是右侧更改。

      - 或 -

    2. 选择“获取传入的项”按钮(或按 F10)接受所有传入更改,或选择“获取当前项”按钮(或按 F11)保留当前版本的所有冲突更改。 可以通过选择任一并排框架顶部的复选框之一来执行相同的操作。

      - 或 -

    3. 在“结果”窗口中手动编辑代码

    提示

    如果不喜欢合并编辑器中的默认布局,可以使用齿轮菜单对其进行更改。

    显示合并编辑器布局选项的屏幕截图。

    例如,以下屏幕截图显示了垂直视图的外观:

    显示合并编辑器垂直视图的屏幕截图。

    提示

    如果不喜欢合并编辑器中的默认布局,请使用齿轮下拉菜单随意更改它。

    合并编辑器布局选项的屏幕截图。

    例如,以下屏幕截图显示了垂直视图的外观:

    合并编辑器用户界面中垂直视图的屏幕截图。

  • 解决合并冲突后,选择“接受合并”。 对所有冲突文件重复此过程。

    Visual Studio 2022 中“接受合并”操作的屏幕截图。

  • 使用“Git 更改”窗口创建合并提交并解决冲突

    显示如何使用“Git 更改”窗口创建合并提交的屏幕截图。

    显示如何使用“Git 更改”窗口创建合并提交的屏幕截图。

    注意

    如果要保留对文件的所有更改,可以在 未合并的更改 部分右键单击该文件,然后选择 保持当前(本地),而无需打开合并编辑器。

    显示“保持当前状态”菜单选项的屏幕截图。

    注意

    如果要保留对文件的所有更改,可以在 未合并的更改 部分右键单击该文件,然后选择 保持当前(本地),而无需打开合并编辑器。

    “保持当前”菜单选项的屏幕截图。

提示

若要详细了解可用的辅助功能选项,请参阅 Visual Studio 页面 辅助功能提示和技巧 部分 Git 键盘快捷方式。

配置比较工具

如果将 .gitconfig 文件 设置为使用 BeyondCompare 或 KDiff3 等第三方对比工具,Visual Studio 会遵循该设置。 每当 Visual Studio 正常显示差异时,就会在你选择的工具中打开一个单独的窗口。 有关示例,请参阅此 Stack Overflow 问题。