本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

在 VS Code 中解决合并冲突

当Git无法自动合并不同分支的更改时,会产生合并冲突。VS Code 提供了多种工具来帮助您高效地识别和解决这些冲突。

了解如何在Visual Studio Code中使用内联编辑器操作、三路合并编辑器和AI辅助解决来解决合并冲突。

理解合并冲突

当Git遇到无法自动解决的竞争性更改时,会发生合并冲突。常见情况包括:

  • 两个分支修改了文件中的相同行
  • 一个分支删除了另一个分支修改的文件
  • 两个分支在相同位置添加不同的内容

当您尝试合并、变基、拉取或挑取包含冲突更改的提交时,Git 会暂停操作并标记冲突,供您手动解决。

小贴士

了解更多关于创建和管理分支的信息,以组织您的开发工作并减少合并冲突。

识别 VS Code 中的冲突

当发生合并冲突时,VS Code 提供多种视觉指示来帮助您识别和解决冲突。带有冲突的文件会显示在源代码控制视图中的合并更改部分。

编辑冲突标记

当您打开一个有冲突的文件时,VS Code 会用以下标记突出显示有冲突的部分:

  • <<<<<<<<<< 头(或当前分支名称):标志着你当前分支更改的开始
  • 输入: =======: 将两个相互矛盾的版本分开
  • 分支名称: 标记了接收分支更改的结束

编辑器中内联冲突标记的屏幕截图,显示当前和即将到来的更改。

代码审查操作

在每个冲突上,VS Code 显示 CodeLens 动作,使您可以快速解决冲突:

  • 接受当前更改:仅保留您的分支版本
  • 接受传入更改:仅保留传入分支的版本
  • 接受所有更改:保留两个版本,一个接一个
  • 比较更改:打开差异视图以并排查看更改

解决与内联操作的冲突

对于简单的冲突,您可以在编辑器中直接使用 CodeLens 动作来解决它们:

  1. 从源代码控制视图中打开有冲突的文件

  2. 查看带有冲突标记的冲突部分

  3. 选择上面冲突的 CodeLens 动作之一:

    • 接受当前更改以保留您的版本
    • 接受传入更改以保留传入版本
    • 接受所有更改 以保留两个版本
  4. 对文件中的每个冲突重复此操作

  5. 当所有冲突解决后保存文件

在文件中解决冲突后,冲突标记会消失,您可以将文件标记为暂存,该文件会移动到源代码控制视图中的暂存更改部分。然后您可以提交更改。

小贴士

对于更复杂的冲突,如果需要将两个更改的部分结合起来,您可以手动编辑文件。删除冲突标记(<<<<<<<<<<输入: =======没有提供任何文本。) 并编辑内容以达到预期效果。

使用三路合并编辑器

对于更复杂的冲突或当你希望并排查看所有更改时,请使用三路合并编辑器。此编辑器提供了一个包含三个面板的全面视图:

  • 入站 (左侧): 合并分支的更改
  • 当前 (右): 从您当前的分支更改
  • 结果(底部):将要保存的合并结果

打开合并编辑器

打开三路合并编辑器:

  1. 在源代码控制视图中选择一个有冲突的文件

  2. 选择在合并编辑器中打开,或选择上下文菜单中的在合并编辑器中解决按钮,该按钮出现在编辑器顶部

    三路合并编辑器的截图,显示了入站、当前和结果面板。

接受合并编辑器中的更改

合并编辑器显示每个冲突更改旁边的复选框。使用这些复选框来选择要接受哪些更改:

  1. 查看 收件箱当前 面板中的更改

  2. 使用编辑器 CodeLens 动作来选择接受哪些更改:

    • 接受入站当前更改
    • 接受一个两者结合的更改,以智能合并这两个更改
    • 忽略更改以将其从结果中排除
  3. 结果面板在底部自动更新以显示您的选择

  4. 使用结果编辑器右侧的冲突计数器来跟踪剩余未解决的冲突数量。

  5. 当所有冲突都解决后,选择完成合并以保存更改并关闭合并编辑器

合并编辑器中的手动编辑

有时你需要将两个更改的部分结合起来或创建一个全新的解决方案。你可以直接编辑结果面板:

  1. 结果面板的任何地方选择以放置光标

  2. 根据需要编辑内容,结合两个更改中的元素或编写新代码

小贴士

使用忽略按钮在入站当前面板中隐藏你不希望接受的更改。这有助于集中关注相关的冲突。

替代布局

选择合并编辑器右上角的三个点 (···) 会打开一个带有附加选项的上下文菜单。您可以切换到垂直布局并显示基础视图,该视图显示在进行任何更改之前文件的状态。

三个点旁边 入站当前结果 提供了每个视图的选项,例如与基线并排显示差异、接受所有更改或重置结果。

解决与AI的冲突(实验性)

注意

AI辅助的冲突解决是一个实验性功能,需要 GitHub Copilot 订阅。

VS Code 可以使用 AI来自动解决合并冲突。此功能分析冲突的两个版本并提出解决方案:

  1. 在编辑器中打开带有冲突的文件

  2. 选择编辑器顶部的用AI解决合并冲突按钮

    编辑器中AI合并冲突解决按钮的截图。

  3. VS Code 打开聊天视图并启动一个分析冲突的代理流程

  4. 在编辑器中查看提议的更改

  5. 接受分辨率或根据需要进行手动调整

AI 考虑合并基(两个分支的公共祖先)和每个分支的更改,以生成一个试图保留两个更改意图的解决方案。

完成合并操作

在解决所有冲突后,您需要通过提交更改来完成合并操作:

  1. 验证所有冲突的文件已被解决并位于暂存更改部分

  2. 输入提交信息并选择提交以完成合并

小贴士

如果你需要放弃合并操作,请在命令面板中选择Git: 中止合并。这将使你的仓库恢复到合并开始前的状态。

将 VS Code 配置为默认合并工具

您可以通过在终端中运行以下命令将 VS Code 设置为默认的 Git 合并工具。当您在命令行中执行合并并出现冲突时,Git 将打开 VS Code 的合并编辑器来帮助您解决这些问题。

git 配置 --全局 合并工具 vscode
git 配置 --全局 mergetool.vscode.cmd 'code --wait $MERGED'

要将 VS Code 作为默认的 Git 差异工具,请运行:

git 配置 --全局 差异工具 vscode
git 配置 --全局 差异工具.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

下一步