【IDEA教程】详解 IDEA 解决 Git 冲突

当您在团队中工作时,您可能会遇到有人将更改推送到您当前正在处理的文件的情况。如果这些更改不重叠(即对不同的代码行进行了更改),则会自动合并冲突的文件。但是,如果相同的行受到影响,Git 不能随机选择一侧而不是另一侧,并要求您解决冲突。
在 Git 中,当您尝试执行以下操作之一时可能会出现冲突:pull、merge、rebase、cherry-pick、unstash 更改或应用补丁。如果存在冲突,这些操作将失败,系统会提示您接受上游版本、首选您的版本或合并更改:
当在 Git 级别检测到冲突时,会自动触发冲突对话框。
如果您在此对话框中单击关闭,或从命令行调用导致合并冲突的 Git 操作,则合并冲突节点将出现在本地更改视图中,并带有解决它们的链接:
IntelliJ IDEA 提供了一种在本地解决冲突的工具。该工具由三个窗格组成:
- 左窗格显示只读本地副本
- 右侧窗格显示签入存储库的只读版本。
- 中央窗格是一个功能齐全的编辑器,其中显示了解决冲突的结果。最初,此窗格的内容与文件的基本修订版相同,即派生出两个冲突版本的修订版。
解决冲突
- 单击Conflicts对话框中的Merge 、 Local Changes视图中的Resolve链接,或在编辑器中选择冲突文件并选择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。
处理与 LF 和 CRLF 行尾相关的冲突
很多时候,在一个团队中工作并为同一个存储库做出贡献的人使用不同的操作系统。这可能会导致行尾出现问题,因为 Unix、Linux 和 MacOS usLF
和 Windows 使用CRLF
来标记行尾。
IntelliJ IDEA 在差异查看器中显示行尾的差异,因此您可以手动修复它们。如果希望 Git 自动解决此类冲突,则需要在 Windows 和Linux 和 MacOS 上将core.autocrlf
属性设置为,您可以通过在 Windows 或Linux 和 macOS 上运行来手动更改配置。true
`inputgit config --global core.autocrlf true
git config --global core.autocrlf input`
但是,IntelliJ IDEA 可以自动分析您的配置,在您即将提交CRLF
到远程存储库时向您发出警告,并建议将core.autocrlf
设置设置为true
或input
取决于您的操作系统。
LF
要启用对和行分隔符的智能处理CRLF
,请打开Settings/Preferences对话框Ctrl+Alt+S,然后选择Version Control | 左侧的Git节点。启用警告如果 CRLF 行分隔符即将提交选项。
启用此选项后,IntelliJ IDEA 将在您每次提交带有分隔符的文件时显示行分隔符警告对话框CRLF
,除非您在受影响的文件中设置了任何相关的Git 属性(在这种情况下,IntelliJ IDEA 假设您清楚地了解您在做什么,并将此文件排除在分析之外)。
在“行分隔符警告”对话框中,单击以下选项之一:
- 按原样提交以忽略警告并提交带有
CRFL
分隔符的文件。 - 修复并提交以将
core.autocrlf
属性设置为true
或input
取决于您的操作系统。结果,CRLF
行分隔符将LF
在提交之前替换为。
如果稍后您需要查看在合并过程中究竟是如何解决冲突的,您可以 在Git工具窗口 的日志选项卡中 找到所需的合并提交,在右侧的提交详细信息窗格中选择一个有冲突的文件,然后单击或按Alt+9Ctrl+D