解决 Git 冲突
当您在团队中协作时,可能会遇到其他人向您当前正在处理的文件推送更改的情况。 如果这些更改没有重叠(即更改发生在代码的不同行),冲突文件会被自动合并。 但是,如果更改影响了相同的行,Git 无法在两者之间随机选择,并会要求您解决冲突。
在 Git 中,尝试执行以下某个操作时可能会出现冲突: pull、 merge、 rebase、 cherry-pick、 unstash changes 或 apply a patch。 如果发生冲突,这些操作将失败,并会系统提示您接受上游版本、保留您的版本或合并更改:

检测到 Git 级别冲突时,会自动触发 冲突 对话框。
如果您在该对话框中点击 关闭 或从命令行调用导致合并冲突的 Git 操作,那么 合并冲突 节点将出现在 更改 视图的 提交 工具窗口中,并附有解决冲突的链接:

WebStorm 提供了一个本地解决冲突的工具。 该工具包含三个面板:
左侧面板显示只读的本地副本
右侧面板显示只读的仓库中提交的版本。
中央面板是一个功能完备的编辑器,用于显示冲突解决后的结果。 最初,该面板中的内容与文件的 base revision 相同,即两个冲突版本的共同来源版本。

解决冲突
点击 合并 (在 冲突 对话框中),或点击 解决 (在 本地更改 视图中),或在编辑器中选择有冲突的文件并从主菜单选择 VCS | Git | 解决冲突。
要自动合并所有无冲突的更改,请点击工具栏上的
(应用所有无冲突更改)。 您也可以分别使用
(应用左侧的无冲突更改 )和
(应用右侧的无冲突更改 ),合并来自对话框左侧或右侧的无冲突更改。
要解决冲突,您需选择对左侧(本地)和右侧(仓库)版本执行的操作(接受
或忽略
),并在中央面板中查看结果代码:

您还可以右键点击中央面板中的高亮冲突区块,并使用上下文菜单中的命令。 使用左侧解决 和 使用右侧解决 命令可以快速实现一键接受一侧更改并忽略另一侧:

对于简单冲突(例如某个版本中添加了多一行的情况),工具栏上会显示 解决简单冲突
按钮,方便一键合并更改。

该类冲突不会使用 应用所有无冲突更改 操作自动解决,因为需要确保更改被正确处理。
解决冲突过程中,比较不同版本可能会有所帮助。 使用工具栏上的
按钮调出选项列表。 请注意, 基础 表示本地版本和仓库版本的共同来源版本(初始显示在中央面板),而 中间 表示合并后的结果版本。
在中央面板中查看合并结果后,点击 应用。
效率提示
- 自动应用无冲突更改
您可以配置 WebStorm 始终自动应用无冲突更改,而无需每次从 合并 对话框中执行操作。 为实现这一点,请在 工具 | 差异合并 设置页面中选择 自动应用无冲突更改 选项 Ctrl+Alt+S。
- 在中央面板中管理更改
您可以使用出现在中央面板中更改标记所在行的边距上的工具栏来管理更改。将鼠标悬停并点击标记后即可显示该工具栏。 工具栏与显示被修改代码行原始内容的可视框一同显示:

例如,当存在多个无冲突更改且只需跳过其中一两个时,使用 应用所有无冲突更改 操作同时应用全部更改后,再通过该工具栏的 还原 操作撤销不需要的更改,会更加方便。
处理 LF 和 CRLF 行结尾相关的冲突
在团队中协作并对同一代码库做出贡献的人员通常使用不同的操作系统。 这可能导致换行符问题,因为 Unix、Linux 和 macOS 使用 LF ,而 Windows 使用 CRLF 作为行尾标记。
WebStorm 会在 差异查看器 中显示换行符差异,方便您手动修复。 如果希望 Git 自动解决此类冲突,您需要在 Windows 上将 core.autocrlf 属性设置为 true ,在 Linux 和 macOS 上设置为 input (详细信息请参阅 Dealing with line endings)。 您可以在 Windows 上运行 git config --global core.autocrlf true 或在 Linux 和 macOS 上运行 git config --global core.autocrlf input ,手动更改配置。
但是,WebStorm 可自动分析您的配置,在您即将提交 CRLF 到远程代码库时发出警告,并根据操作系统建议将 core.autocrlf 设置为 true 或 input。
要启用对 LF 和 CRLF 换行符的智能处理,请打开 设置 对话框 Ctrl+Alt+S ,并在左侧选择 版本控制 | Git 节点。 启用 提交前警告存在 CRLF 行分隔符 选项。
启用该选项后,若您要提交包含 CRLF 换行符的文件,WebStorm 将每次显示 行分隔符警告对话框 ,除非该文件中已设置相关 Git attributes (在这种情况下,WebStorm 认为您清楚自己的操作并跳过此文件的分析)。
在 行分隔符警告对话框 中,点击以下选项之一:
直接提交 ,忽略警告并提交包含
CRLF换行符的文件。修复并提交 ,将
core.autocrlf属性设置为true或input,具体取决于您的操作系统。 因此,在提交前,CRLF换行符将被替换为LF。
如果之后需要查看合并过程中如何解决冲突,您可以在 日志 选项卡中找到所需的合并提交,在 Git 工具窗口 Alt+9 的右侧 提交详情 面板中选择包含冲突的文件,并单击 或按 Ctrl+D。 有关更多信息,请参阅 Review how changes were merged。