解决 Git 冲突
最后修改时间:2023 年 9 月 7 日当您在团队中工作时,您可能会遇到有人将更改推送到您当前正在处理的文件的情况。如果这些更改不重叠(即,对不同的代码行进行了更改),则会自动合并冲突的文件。但是,如果相同的行受到影响,Git 无法随机选择一侧而不是另一侧,并要求您解决冲突。
在 Git 中,当您尝试执行以下操作之一时可能会出现冲突:pull、merge、rebase、cherry-pick、unstash 更改或apply a patch。如果存在冲突,这些操作将失败,并且系统将提示您接受上游版本、首选您的版本或合并更改:
当在 Git 级别检测到冲突时,会自动触发“冲突”对话框。
如果您在此对话框中单击“关闭”或从命令行调用导致合并冲突的 Git 操作,则“本地更改”视图中将出现“合并冲突”节点,并提供用于解决这些问题的链接:
IntelliJ IDEA 提供了一个在本地解决冲突的工具。该工具由三个窗格组成:
左侧窗格显示只读本地副本
右窗格显示签入存储库的只读版本。
中央窗格是一个功能齐全的编辑器,其中显示解决冲突的结果。最初,此窗格的内容与文件的基本修订版本相同,即派生两个冲突版本的修订版本。
解决冲突
单击“冲突”对话框中的“合并”、“本地更改”视图中的“解决”链接,或在编辑器中选择冲突文件并选择“VCS | ”。git | git 从主菜单解决冲突。
要自动合并所有不冲突的更改,请单击工具栏上的(应用所有不冲突的更改)。您还可以使用(从左侧应用非冲突更改)和(从右侧应用非冲突更改)分别合并对话框左/右部分的非冲突更改。
要解决冲突,您需要选择对左侧(本地)和右侧(存储库)版本应用哪个操作(接受或忽略),并在中央窗格中检查生成的代码:
您还可以右键单击中央窗格中突出显示的冲突,然后使用上下文菜单中的命令。使用左侧解决和使用右侧解决命令分别提供了从一侧接受更改并从另一侧忽略更改的快捷方式:
对于简单冲突(例如,如果同一行的开头和结尾已在不同的文件修订版中修改),可以使用“解决简单冲突” 按钮,该按钮允许一键合并更改。
此类冲突无法通过“应用所有非冲突更改”操作来解决,因为您必须确保它们得到正确解决。
笔记
请注意,中央窗格是一个功能齐全的编辑器,因此您可以直接在此对话框中更改结果代码。
比较不同版本以解决冲突也可能很有用。使用工具栏按钮调用选项列表。请注意,Base是指本地版本和存储库版本源自的文件版本(最初显示在中间窗格中),而Middle是指结果版本。
在中央窗格中查看合并结果,然后单击“应用”。
生产力技巧
处理与 LF 和 CRLF 行结尾相关的冲突
通常,在团队中工作并为同一存储库做出贡献的人们使用不同的操作系统。这可能会导致行结束问题,因为 Unix、Linux 和 macOS 使用LF
,而 Windows 使用CRLF
来标记行结束。
IntelliJ IDEA 在差异查看器中显示行结尾的差异,以便您可以手动修复它们。如果您希望 Git 自动解决此类冲突,则需要在 Windows 上将该core.autocrlf
属性设置为to ,在 Linux 和 macOS 上则需要将该属性设置为 to(更多详细信息,请参阅处理行结尾)。您可以通过在 Windows 或Linux 和 macOS 上运行来手动更改配置。true
input
git config --global core.autocrlf true
git config --global core.autocrlf input
但是,IntelliJ IDEA 可以自动分析您的配置,在您要提交CRLF
到远程存储库时发出警告,并建议将设置设置core.autocrlf
为true
或input
取决于您的操作系统。
要启用对LF
和CRLF
行分隔符的智能处理,请打开“设置”对话框,然后选择“版本控制”|“版本控制”|“版本控制”。左侧的Git节点。启用“如果将要提交 CRLF 行分隔符则发出警告”选项。CtrlAlt0S
启用此选项后,每次您要提交带有分隔符的文件时, IntelliJ IDEA 都会显示行分隔符警告对话框,除非您在受影响的文件中CRLF
设置了任何相关的Git 属性(在这种情况下,IntelliJ IDEA 假设您清楚地了解您在做什么并从分析中排除该文件)。
在“行分隔符警告”对话框中,单击以下选项之一:
按原样提交忽略警告并提交带有
CRLF
分隔符的文件。修复并提交以将
core.autocrlf
属性设置为true
或input
取决于您的操作系统。因此,行分隔符将在提交之前CRLF
被替换。LF
如果稍后您需要查看合并过程中冲突的具体解决情况,可以在 Git工具窗口 的 “日志”选项卡中找到所需的合并提交,然后在右侧的“提交详细信息”窗格中选择有冲突的文件,然后单击或按。有关详细信息,请参阅查看如何合并更改。Alt09Ctrl0D
观看此视频以了解有关如何解决合并冲突的更多信息:
感谢您的反馈意见!