假设我有一个包含 2 个文件的存储库:
来源.py
def foo() -> int:
return 1
冲突.py
from source import foo
def bar() -> int:
return foo()
现在,我创建并尝试解决合并冲突:
冲突.py
from source import foo
def bar() -> float:
return foo()
我收到了预期的对话框并且能够解决冲突:
现在如何查看代码并检查
foo()
的实际返回类型?
合并冲突解决窗口固定在顶部。 Command/ctrl+单击
foo()
不起作用。即使打开我的存储库的第二个克隆也无法避免这种侵入行为。
此行为对于 macOS 和 Windows 是相同的。我使用的是 PyCharm 2022.2.3 Professional。
合并冲突对话框是模态的,并且模态严格限于每个应用程序。在此期间您不能执行任何代码操作。 请参阅:https://youtrack.jetbrains.com/issue/IDEA-66552/Merge-dialog-should-not-be-modal-as-well-as-side-diffs-invoked-from-it
您可以通过关闭所有窗口、转到编辑器、检查代码来检查代码。 之后,您可以通过单击“提交”选项卡中的“解决冲突”返回冲突解决。
有一个解决方法 - 已确认版本
2022.3 Professional
和 2023.3 Professional
。
在 Dino Letic 链接的线程上引用 Dirk Moebius 的话:
我刚刚发现有一种方法可以绕过模式对话框 完全一样,但并不明显:
合并期间打开“冲突”对话框时,不要按“合并”, 请按“关闭”按钮。然后会显示合并冲突 在“提交”选项卡中名为“合并冲突”的部分中。
“合并冲突”部分有一个链接“解决...”,但不要单击 这样,它只会再次打开相同的模式对话框。相反,对于每个 冲突的文件,右键单击它并从列表中选择“合并...” 上下文弹出菜单。这将再次打开“合并”对话框,但是这 时间它仅适用于选定的文件,并且它不是模态的!你可以 切换回主 IDE 窗口并检查和编辑其他文件 那里。您可以将“合并”对话框移动到第二台显示器上并继续工作 同时打开两个窗口!
解决该文件的“合并”对话框中的所有冲突后, 单击“应用”,或单击链接“保存更改并完成” 在出现的弹出窗口中合并”。这两个操作都只是解决了 当前文件的冲突。 (文本“...并完成合并”是 这里有误导性,因为它实际上并没有完成合并 只要还有其他冲突。)
对每个文件重复这些步骤,直到解决所有冲突。
我使用的是IntelliJ IDEA 2021.2.3企业版。不知道其他有没有 版本支持这种工作流程。
第 1 步(可选)
关闭拉取后出现的冲突解决提示。
第2步
右键单击您要解析的文件,然后选择
Merge
。不要尝试通过选择蓝色 Resolve
文本来解决这将打开之前的提示,从而导致有问题的模式。而是单独解析文件。
第3步
现在您可以在检查代码时解决冲突。