解决 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 键盘快捷方式。

批量解决冲突

从 Visual Studio 2026 版本 18.11 开始,当你希望所有受影响的文件都保留同一侧时,可以一步解决单个文件、文件夹或整个存储库的冲突。

  1. 在 Git 更改中,找到 未合并的更改。
  2. 右键单击文件、文件夹或存储库根目录。
  3. 选择“全部保留当前版本”以保留当前版本,或选择“全部接受传入版本”以接受传入版本。

该操作适用于所选文件,或所选文件夹或存储库根目录下的冲突文件。 在选择操作之前,请先查看范围。 这些批量命令是在合并编辑器中逐个处理每个文件的替代方法。 它们不同于“采用当前值”和“采用传入值”按钮。

解决所有冲突后,使用 Git 更改 创建合并提交,如 解决合并冲突中所述。

配置 diff 工具

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