现已发布!阅读关于 11 月新增功能和修复的内容。

在 VS Code 中解决合并冲突

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

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

理解合并冲突

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

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

当您尝试合并、变基、拉取或挑选包含冲突更改的提交时,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.