解决冲突
最后修改时间:2023 年 8 月 23 日根据您的版本控制系统,在不同情况下可能会出现冲突。
当您在团队中工作时,您可能会遇到有人对您当前正在处理的文件提交更改的情况。如果这些更改不重叠(即,对不同的代码行进行了更改),则会自动合并冲突的文件。但是,如果相同的行受到影响,您的版本控制系统无法随机选择一侧而不是另一侧,并要求您解决冲突。
合并、变基或挑选分支时也可能会出现冲突。
非分布式版本控制系统
当您尝试编辑服务器上具有较新版本的文件时,IntelliJ IDEA 会通知您,并在编辑器中显示一条弹出消息:
在这种情况下,您应该在更改文件之前更新本地版本或稍后合并更改。
如果您尝试提交具有较新存储库版本的文件,则提交会失败,并且右下角会显示一条错误,告诉您尝试提交的文件已过期。
提示
失败的提交行为由版本控制 |中的“在失败的提交列表上创建更改列表”控制。设置对话框的确认页面。
如果将已进行本地更改的文件与其他人提交的较新存储库版本进行同步,则会发生冲突。冲突文件将获得“已合并冲突”状态。该文件保留在“更改”视图中的同一更改列表中 ,但其名称以红色突出显示。如果文件当前在编辑器中打开,选项卡标题上的文件名也会以红色突出显示。
分布式版本控制系统
在分布式版本控制系统(例如 Git 和 Mercurial)下,当您在本地提交的文件对与最新上游版本相同的代码行进行更改时,以及当您尝试执行以下操作之一时,就会出现冲突:pull、merge、rebase、cherry-pick、unstash或apply patch。
如果存在冲突,这些操作将失败,并且系统将提示您接受上游版本、首选您的版本或手动合并更改:
当在版本控制级别检测到冲突时,会自动触发“冲突”对话框。
如果您在此对话框中单击“关闭”或从命令行调用导致合并冲突的 Git 操作,则“本地更改”视图中将出现“合并冲突”节点,并提供用于解决这些问题的链接:
IntelliJ IDEA 提供了一个在本地解决冲突的工具。该工具由三个窗格组成:
左侧窗格显示只读本地副本
右窗格显示签入存储库的只读版本
中央窗格显示一个功能齐全的编辑器,其中显示合并和冲突解决的结果。最初,此窗格的内容与文件的基本修订版本相同,即派生两个冲突版本的修订版本。
解决冲突
单击“冲突”对话框中的“合并”、“本地更改”视图中的“解决”链接,或在编辑器中选择冲突文件并选择“VCS | ”。<您的VCS> | 从主菜单解决冲突。
要自动合并所有不冲突的更改,请单击工具栏上的(应用所有不冲突的更改)。您还可以使用(从左侧应用非冲突更改)和(从右侧应用非冲突更改)分别合并对话框左/右部分的非冲突更改。
要解决冲突,您需要选择对左侧(本地)和右侧(存储库)版本应用哪个操作(接受或忽略),并在中央窗格中检查生成的代码:
您还可以右键单击中央窗格中突出显示的冲突,然后使用上下文菜单中的命令。使用左侧解决和使用右侧解决命令分别提供了从一侧接受更改并从另一侧忽略更改的快捷方式:
对于简单冲突(例如,如果同一行的开头和结尾已在不同的文件修订版中修改),可以使用“解决简单冲突” 按钮,该按钮允许一键合并更改。
此类冲突无法通过“应用所有非冲突更改”操作来解决,因为您必须确保它们得到正确解决。
笔记
请注意,中央窗格是一个功能齐全的编辑器,因此您可以直接在此对话框中更改结果代码。
比较不同版本以解决冲突也可能很有用。使用工具栏按钮调用选项列表。请注意,Base是指本地版本和存储库版本源自的文件版本(最初显示在中间窗格中),而Middle是指结果版本。
在中央窗格中查看合并结果,然后单击“应用”。
生产力技巧
如果您使用 Git 作为版本控制系统,请观看此视频,了解如何解决合并冲突:
感谢您的反馈意见!