在 VS Code 中解决合并冲突
当 Git 无法自动合并来自不同分支的更改时,就会发生合并冲突。VS Code 提供了多种工具来帮助您高效地识别和解决这些冲突。
了解如何使用 Visual Studio Code 中的行内编辑器操作、三向合并编辑器和 AI 辅助分辨率来解决合并冲突。
理解合并冲突
当 Git 遇到无法自动解决的冲突更改时,就会发生合并冲突。常见场景包括:
- 两个分支修改了同一个文件的同一行
- 一个分支删除了另一个分支修改的文件
- 两个分支在同一位置添加了不同的内容
当您尝试合并、变基、拉取或挑选包含冲突更改的提交时,Git 会暂停操作并标记冲突,以便您手动解决。
了解有关创建和管理分支的更多信息,以组织您的开发工作并最大程度地减少合并冲突。
在 VS Code 中识别冲突
当发生合并冲突时,VS Code 会提供多种视觉指示器来帮助您识别和解决它们。带有冲突的文件会出现在“源代码管理”视图下的“合并更改”部分。
编辑器冲突标记
打开带有冲突的文件时,VS Code 会使用以下标记突出显示冲突部分:
<<<<<<< HEAD(或当前分支名):标记您当前分支更改的开始=======:分隔两个冲突的版本>>>>>>> branch-name:标记传入分支更改的结束

CodeLens 操作
在每个冲突上方,VS Code 会显示 CodeLens 操作,让您可以快速解决冲突。
- 接受当前更改:仅保留您分支的版本
- 接受传入更改:仅保留传入分支的版本
- 接受两处更改:保留两个版本,一个接一个
- 比较更改:打开差异视图,以并排方式查看差异
使用行内操作解决冲突
对于简单的冲突,您可以使用 CodeLens 操作直接在编辑器中解决它们。
-
从“源代码管理”视图打开带有冲突的文件
-
查看用冲突标记标记的冲突部分
-
选择冲突上方的 CodeLens 操作之一
- 选择“接受当前更改”以保留您的版本
- 选择“接受传入更改”以保留传入的版本
- 选择“接受两处更改”以保留两个版本
-
对文件中的每个冲突重复此操作
-
解决所有冲突后保存文件
在文件中的冲突解决后,冲突标记将消失,您可以暂存文件,它将移动到“源代码管理”视图的“已暂存的更改”部分。然后,您可以继续提交更改。
对于更复杂的冲突,您需要组合两处更改的部分,可以手动编辑文件。删除冲突标记(<<<<<<<、=======、>>>>>>>)并编辑内容以生成所需结果。
使用三向合并编辑器
对于更复杂的冲突,或当您想要并排查看所有更改时,可以使用三向合并编辑器。此编辑器提供了带有三个面板的全面视图:
- 传入(左):将被合并分支的更改
- 当前(右):您当前分支的更改
- 结果(底部):将被保存的合并结果
打开合并编辑器
要打开三向合并编辑器:
-
在“源代码管理”视图中选择一个带有冲突的文件
-
从上下文菜单中选择“在合并编辑器中打开”,或者选择编辑器顶部出现的“在合并编辑器中解决”按钮。

在合并编辑器中接受更改
合并编辑器会显示带有复选框的冲突,每个冲突更改旁边都有一个复选框。使用这些复选框选择要接受的更改。
-
在“传入”和“当前”面板中查看更改
-
使用编辑器 CodeLens 操作选择要接受的更改
- 接受“传入”或“当前”的更改
- 接受“两处更改的组合”以智能合并两处更改
- “忽略”更改,将其排除在结果之外
-
底部的“结果”面板会自动更新,以显示您的选择。
-
使用结果编辑器右侧的冲突计数指示器来跟踪剩余的未解决冲突的数量。
-
当所有冲突都解决后,选择“完成合并”以暂存更改并关闭合并编辑器。
在合并编辑器中手动编辑
有时您需要组合两处更改的部分,或者创建一个全新的解决方案。您可以直接编辑“结果”面板。
-
选择“结果”面板中的任意位置来放置您的光标
-
根据需要编辑内容,组合两处更改的元素或编写新代码
使用“传入”或“当前”面板中的“忽略”按钮来隐藏您不想接受的更改。这有助于专注于相关的冲突。
替代布局
选择合并编辑器右上角的三个点(···)会打开一个上下文菜单,其中包含其他选项。您可以切换到垂直布局,并显示基础视图,该视图显示文件在任何更改发生之前的状态。
“传入”、“当前”和“结果”旁边的三个点提供了每个视图的选项,例如显示与基础的并排差异、接受所有更改或重置结果。
通过 AI 解决冲突(实验性功能)
AI 辅助冲突分辨率是一项实验性功能,需要 GitHub Copilot 订阅。
VS Code 可以使用 AI 来帮助自动解决合并冲突。此功能会分析冲突更改的两个版本,并提出一个解决方案。
-
在编辑器中打开一个带有冲突的文件
-
选择编辑器顶部的“使用 AI 解决合并冲突”按钮

-
VS Code 会打开“聊天”视图,并启动一个代理流程来分析冲突。
-
在编辑器中审查建议的更改
-
接受解决方案或根据需要进行手动调整
AI 会考虑合并基础(两个分支的共同祖先)以及每个分支的更改,以生成一个解决方案,该解决方案会尝试保留两个更改的意图。
完成合并操作
在解决所有冲突后,您需要通过提交更改来完成合并操作。
-
验证所有冲突的文件都已解决,并位于“已暂存的更改”部分。
-
输入提交消息并选择“提交”以完成合并。
如果您需要放弃合并操作,请从命令面板中选择“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'
后续步骤
- 分支和工作区 - 了解分支管理和最大程度减少冲突的策略
- 暂存和提交 - 了解暂存更改和创建提交
- 存储库和远程 - 了解与远程存储库的协作
- 源代码管理概述 - 探索 VS Code 中的其他 Git 功能
- VS Code 中的 Copilot - 发现更多 AI 驱动的开发功能