解决 Git 冲突
当您在团队中工作时,可能会遇到有人将更改推送到您当前正在处理的文件的情况。 如果这些更改不重叠(即更改发生在不同的代码行),冲突的文件会自动合并。 但是,如果影响到了相同的行,Git 无法随意选择一方,而是会要求您解决冲突。
在 Git 中,当您尝试执行以下操作之一时,可能会产生冲突: pull、 merge、 rebase、 cherry-pick、 unstash changes 或 apply a patch。 如果存在冲突,这些操作将失败,并提示您接受上游版本、偏好您的版本或合并更改:

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

PyCharm 提供用于本地解决冲突的工具。 该工具由三个窗格组成:
左侧窗格显示只读的本地副本
右侧窗格显示检入存储库的只读版本。
中间窗格是一个功能完备的编辑器,用于显示解决冲突的结果。 最初,此窗格的内容与文件的 基准版本 相同,即两个发生冲突的版本所派生自的版本。

已修改的行
已删除的行
新添加的行
冲突的行
解决冲突
在 冲突 对话框中点击 合并 ,在 本地更改 视图中点击 解决 链接,或在编辑器中选择冲突文件并从主菜单中选择 VCS | Git | 解决冲突。
要自动合并所有非冲突更改,请点击工具栏上的
(应用所有非冲突更改)。 您也可以使用
(应用左侧的非冲突更改 )和
(应用右侧的非冲突更改 ),分别合并来自对话框左侧和右侧的非冲突更改。
要解决冲突,您需要选择对左侧(本地)和右侧(存储库)版本应用哪种操作(接受
或忽略
),并在中间窗格中检查生成的代码:

您也可以在中间窗格中右键点击高亮的冲突,并使用上下文菜单中的命令。 使用左侧解决 和 使用右侧解决 命令分别提供从一侧接受更改并从另一侧忽略更改的快捷方式:

对于简单冲突(例如,同一行的开头和末尾在不同的文件修订中被修改),将显示 解决简单冲突
按钮,使您可以一键合并更改。

此类冲突不会通过 应用所有非冲突更改 操作解决,因为您必须确保它们被正确解决。
比较不同版本以解决冲突也很有用。 使用工具栏上的
按钮以调用选项列表。 请注意, 基线 指的是本地版本和存储库版本的共同来源文件版本(最初显示在中间窗格),而 中间 指的是生成的版本。
在中间窗格中查看合并结果,然后点击 应用。
效率提示
- 自动应用非冲突更改
您可以将 PyCharm 配置为始终自动应用非冲突更改,而不是在 合并 对话框中让其执行此操作。 为此,请在 工具 | 差异与合并 设置页面上选择 自动应用非冲突更改 选项  Ctrl+Alt+S。
- 在中间窗格中管理更改
当您将鼠标悬停在装订区域中的更改标记上并点击它时,会显示一个工具栏,您可以使用该工具栏在中间窗格中管理更改。 该工具栏与一个显示已修改行先前内容的框架一起显示:

例如,当存在多个非冲突更改且您只需跳过其中一两个时,使用此工具栏中的 应用所有非冲突更改 操作一次性应用所有更改,然后使用 还原 操作撤销不需要的更改,会更为简便。
处理与 LF 和 CRLF 行结尾相关的冲突
经常会出现这样的情况:在团队中协作并为同一存储库做出贡献的人使用不同的操作系统。 这可能会导致行结尾问题,因为 Unix、Linux 和 macOS 使用 LF ,而 Windows 使用 CRLF 来标记一行的结尾。
PyCharm 会在 差异查看器 中显示行结尾的不一致,以便您手动修复。 如果您希望 Git 自动解决此类冲突,需要在 Windows 上将 core.autocrlf 属性设置为 true ,在 Linux 和 macOS 上设置为 input (有关详细信息,请参阅 处理行结尾)。 您可以在 Windows 上运行 git config --global core.autocrlf true 或在 Linux 和 macOS 上运行 git config --global core.autocrlf input 来手动更改配置。
但是,PyCharm 可以自动分析您的配置,当您即将把 CRLF 提交到远程存储库时发出警告,并建议根据您的操作系统将 core.autocrlf 设置为 true 或 input。
要启用对 LF 和 CRLF 行分隔符的智能处理,请打开 设置 对话框 Ctrl+Alt+S ,然后在左侧选择 版本控制 | Git 节点。 启用 即将提交包含 CRLF 行分隔符时发出警告 选项。
启用此选项后,每次您即将提交包含 CRLF 分隔符的文件时,PyCharm 都会显示 行分隔符警告对话框 ,除非您已在受影响的文件中设置任何相关的 Git 属性 (在这种情况下,PyCharm 认为您清楚自己在做什么,并将此文件从分析中排除)。
在 行分隔符警告对话框 中,点击以下之一:
按原样提交 以忽略警告并提交带有
CRLF分隔符的文件。修复并提交 以根据您的操作系统将
core.autocrlf属性设置为true或input。 因此,在提交之前,CRLF行分隔符将被替换为LF。
如果您在稍后需要查看在合并期间冲突究竟是如何解决的,您可以在 Git 工具窗口 Alt+9 的 日志 选项卡中定位所需的合并提交,在右侧的 提交详细信息 窗格中选择一个包含冲突的文件,然后点击 或按 Ctrl+D。 有关更多信息,请参阅 查看更改的合并方式。