解决冲突
根据您的版本控制系统,在不同情况下可能会出现冲突。
当您在团队中工作时,您可能会遇到有人对您当前正在处理的文件提交更改的情况。如果这些更改不重叠(即对不同的代码行进行了更改),则会自动合并冲突的文件。但是,如果相同的行受到影响,您的版本控制系统不能随机选择一侧而不是另一侧,并要求您解决冲突。
合并、变基或挑选分支时也可能出现冲突。
非分布式版本控制系统
当您尝试在服务器上编辑具有较新版本的文件时,WebStorm 会通知您,并在编辑器中显示一条消息弹出窗口:
在这种情况下,您应该在更改文件之前更新本地版本,或者稍后合并更改。如果您尝试提交具有较新存储库版本的文件,则提交失败,并且右下角会显示一个错误,告诉您您尝试提交的文件已过期。
如果您将已具有本地更改的文件与其他人提交的较新存储库版本同步,则会发生冲突。冲突的文件将获得已合并的冲突状态。该文件保留在 Local Changes视图中的相同更改列表中,但其名称以红色突出显示。如果文件当前在编辑器中打开,选项卡标题上的文件名也会以红色突出显示。
分布式版本控制系统
在分布式版本控制系统(例如 Git 和 Mercurial)下,当您在本地提交的文件更改了与最新上游版本相同的代码行时,以及当您尝试执行以下操作之一时,就会出现冲突:拉取、合并、rebase、cherry-pick、unstash或apply patch。
如果存在冲突,这些操作将失败,系统会提示您接受上游版本、首选您的版本或手动合并更改:
当在版本控制级别检测到冲突时,会自动触发冲突对话框。
如果您在此对话框中单击关闭,或从命令行调用导致合并冲突的 Git 操作,则合并冲突节点将出现在本地更改视图中,并带有解决它们的链接:
WebStorm 提供了一种在本地解决冲突的工具。该工具由三个窗格组成:
左页显示只读本地副本
右窗格显示签入存储库的只读版本
中央窗格显示了一个功能齐全的编辑器,其中显示了合并和冲突解决的结果。最初,此窗格的内容与文件的基本修订版相同,即派生出两个冲突版本的修订版。
解决冲突
单击Conflicts对话框中的Merge 、 Local Changes视图中的Resolve链接,或在编辑器中选择冲突文件并选择VCS | <your_VCS> | 从主菜单解决冲突。
要自动合并所有不冲突的更改,请单击工具栏上的( Apply All Non-Conflicting Changes )。您还可以使用( Apply Non-Conflicting Changes from the Left Side ) 和( Apply Non-Conflicting Changes from the Right Side ) 分别合并对话框左/右部分的非冲突更改。
要解决冲突,您需要选择将哪个操作(接受或忽略)应用于左侧(本地)和右侧(存储库)版本,并在中央窗格中检查生成的代码:
您还可以右键单击中央窗格中突出显示的冲突并使用上下文菜单中的命令。Resolve using Left和Resolve using Right命令提供了从一侧接受更改并分别从另一侧忽略它们的快捷方式:
对于简单的冲突(例如,如果在其中一个修订中添加了额外的行),工具栏上可以使用允许一键合并更改的解决简单冲突 按钮。
此类冲突无法通过Apply All Non-Conflicting Changes操作解决,因为您必须确保它们已正确解决。
比较不同的版本以解决冲突也可能很有用。使用工具栏按钮调用选项列表。请注意,Base指的是本地版本和存储库版本源自的文件版本(最初显示在中间窗格中),而Middle指的是结果版本。
在中央窗格中查看合并结果,然后单击Apply。
生产力提示
- 自动应用不冲突的更改
您可以将 WebStorm 配置为始终自动应用非冲突更改,而不是在“合并”对话框中告诉它这样做。为此,请选择工具 |上的自动应用非冲突更改选项。IDE设置的Diff MergeCtrl+Alt+S页面。
- 在中央窗格中管理更改
您可以使用将鼠标光标悬停在装订线中的更改标记上时出现的工具栏管理中央窗格中的更改,然后单击它。工具栏与显示修改行的先前内容的框架一起显示:
例如,当有多个非冲突更改,而您只需要跳过其中的一两个时,使用Apply all non-conflicting changes操作同时应用所有这些更改会更容易,然后使用从此工具栏中恢复操作。