在 VS Code 中解决合并冲突

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

了解如何使用内联编辑器操作、三向合并编辑器以及 AI 辅助解决方式,在 Visual Studio Code 中解决合并冲突。

了解合并冲突

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

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

当您尝试合并、变基(rebase)、拉取(pull)或拣选(cherry-pick)包含冲突更改的提交时,Git 会暂停操作并标记冲突,以便您手动解决。

提示

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

在 VS Code 中识别冲突

当发生合并冲突时,VS Code 会提供多种视觉指示器来帮助您识别和解决它们。存在冲突的文件会出现在“源代码管理”视图的“合并更改”部分中。

编辑器冲突标记

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

  • <<<<<<< HEAD(或当前分支名称):标记当前分支更改的开始
  • =======:分隔两个冲突版本
  • >>>>>>> branch-name:标记传入分支更改的结束

Screenshot of inline conflict markers in the editor showing current and incoming changes.

CodeLens 操作

在每个冲突上方,VS Code 会显示 CodeLens 操作,让您可以快速解决冲突:

  • 采用当前更改:仅保留您分支的版本
  • 采用传入更改:仅保留传入分支的版本
  • 保留双方更改:保留两个版本,前后排列
  • 比较更改:打开差异视图以并排查看差异

使用内联操作解决冲突

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

  1. 在“源代码管理”视图中打开有冲突的文件

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

  3. 选择冲突上方的其中一个 CodeLens 操作

    • 采用当前更改以保留您的版本
    • 采用传入更改以保留传入版本
    • 保留双方更改以保留两个版本
  4. 对文件中的每个冲突重复此操作

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

解决文件中的冲突后,冲突标记将消失,您可以暂存该文件,它将移至“源代码管理”视图中的“暂存的更改”部分。然后,您可以继续提交更改。

提示

对于需要合并两部分更改的更复杂冲突,您可以手动编辑文件。删除冲突标记(<<<<<<<=======>>>>>>>)并编辑内容以创建预期的结果。

使用三向合并编辑器

对于更复杂的冲突,或者当您想要并排查看所有更改时,请使用三向合并编辑器。此编辑器提供了一个包含三个面板的综合视图:

  • 传入(左侧):来自正在合并的分支的更改
  • 当前(右侧):来自您当前分支的更改
  • 结果(底部):将要保存的合并结果

打开合并编辑器

要打开三向合并编辑器:

  1. 在“源代码管理”视图中选择一个有冲突的文件

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

    Screenshot of the 3-way merge editor showing incoming, current, and result panels.

在合并编辑器中接受更改

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

  1. 在“传入”和“当前”面板中查看更改

  2. 使用编辑器 CodeLens 操作选择要接受的更改

    • 接受“传入”或“当前”更改
    • 接受“两者的组合”更改以智能合并两个更改
    • 忽略更改以将其排除在结果之外
  3. 底部的“结果”面板会自动更新以显示您的选择

  4. 使用结果编辑器右侧的冲突计数指示器来跟踪还剩下多少未解决的冲突。

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

在合并编辑器中进行手动编辑

有时您需要组合两个更改的部分内容或创建一个全新的解决方案。您可以直接编辑“结果”面板:

  1. 在“结果”面板中的任何位置选择以放置光标

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

提示

使用“传入”或“当前”面板中的“忽略”按钮隐藏您不想接受的更改。这有助于专注于相关的冲突。

替代布局

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

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

使用 AI 解决冲突(实验性)

注意

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

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

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

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

    Screenshot of the AI merge conflict resolution button in the editor.

  3. VS Code 打开聊天视图并启动一个智能体流程来分析冲突

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

  5. 接受解决方案或根据需要进行手动调整

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

完成合并操作

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

  1. 验证所有冲突文件是否已解决并处于“暂存的更改”部分

  2. 输入提交消息并选择“提交”以完成合并

提示

如果您需要放弃合并操作,请从命令面板中选择“Git: 终止合并”。这会将您的存储库恢复到合并开始之前的状态。

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

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

git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'

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

git config --global diff.tool vscode
git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

后续步骤

© . This site is unofficial and not affiliated with Microsoft.