文本合并
文本合并 会把文件两个版本中的更改合并为一个可编辑的结果。冲突 会在两个更改互不兼容、必须做出决定时出现。
布局
这个界面会显示同一个文件的三个版本。
- 左侧面板 是你的版本,包含本地更改。
- 中间面板 是结果,只有这个面板可编辑。
- 右侧面板 是传入版本,包含远端更改。
文本合并有两种布局:
- 带插入空隙的合并 使用明确的空隙行来保持三个面板对齐。
- 带连接线的合并 使用连接列来显示相关更改在各面板之间如何对应。
切换时请使用 视图 菜单,或右上角的分段控件。
基础版本
还有第四个版本:基础版本。它是双方开始修改之前的原始版本。这与 Git 的三方合并模型一致:
Local → Base ← Remote
↓
Result
在 ABDiff 中,中间面板可以在结果和基础版本之间切换,帮助你更清楚地理解发生了什么变化。
什么是冲突?
冲突发生在双方以不同方式修改了同样的行时。比如原来的值是 “blue”,现在一边改成了 “green”,另一边改成了 “red”。Git 无法判断哪个更改才是正确的,因此需要手动解决。
这种情况会在两个人同时编辑同样的行时出现。如果更改不重叠,Git 会自动合并;如果重叠,就必须手动解决冲突。
解决冲突
如果你已经配置了 Git,当 Git 发现冲突时,ABDiff 会自动启动。结果区域会保持未解决状态,而你的任务就是定义它的内容。你有三种方式:
- 用本地版本解决
- 用传入版本解决
- 自己编写结果
- 编辑当前选中的行(Return 或双击)
- 或从任一侧复制行:右键 ▸ 将所选内容复制到结果 (⌘→ / ⌘←)
提示:
- 扩展选区(⇧↑ / ⇧↓)即可一次复制多行。
- 任意更改都可以用 ⌘Z 撤销。
标记为已解决
完成后,请保存文件(文件 ▸ 保存 或 ⌘S)。这样 Git 就会知道该冲突已被解决。
如果你不想解决这个冲突,直接关闭文件而不保存即可。
编辑与导航
导航
| 操作 | 快捷键 |
|---|---|
| 上一行 / 下一行 | ↑ / ↓ |
| 上一个 / 下一个面板 | ← / → |
| 跳到第一行 / 最后一行 | ⌘↑ / ⌘↓ |
| 上一个 / 下一个更改 | ⌥↑ / ⌥↓ |
| 上一个 / 下一个 hunk | ⌥↑ / ⌥↓ |
| 切换到另一个面板 | ⇥ |
复制
| 操作 | 快捷键 |
|---|---|
| 将所选内容复制到结果 | ⌘← ⌘→ |
| 扩展选区 | ⇧↑ / ⇧↓ |
| 用我们的版本 / 对方的版本解决 | ⇧⌘→ / ⇧⌘← |
选中的行 会用灰色矩形显示。hunk 是连续的冲突或更改块。复制操作只有在会修改结果面板、并且选区位于真实文本行上时才会启用。按住 Shift 点击一行,也会在同一面板内扩展当前选区。
复制更改时:
- 使用 复制 来复制当前选中的行。
- 使用 复制整个 hunk 来复制当前选中行所在的整个块。
- 在当前选区内右键点击会保留选区;在别处右键点击则会先选中那一行。
- 行的上下文菜单在可用时还会提供 向上扩展选区 / 向下扩展选区。
- 对选中的行使用 用以下内容解决,可以通过右键菜单,或 编辑 ▸ 用以下内容解决 菜单完成。
所有复制操作都可以用 ⌘Z 撤销。
编辑
| 操作 | 快捷键 |
|---|---|
| 开始编辑所选结果行 | Return |
| 直接开始编辑某一结果行 | 双击该行 |
| 确认并跳到下一条可编辑行 | Return(编辑时) |
| 确认并退出编辑模式 | Command-Return |
| 丢弃当前行缓冲并退出编辑模式 | Esc 或 Command-. |
你也可以通过双击一行来开始编辑。所有编辑操作都可以用 ⌘Z 撤销。
视图选项
文本合并提供了一些选项,用于改变比较的计算方式或显示方式。这些选项可以在选项菜单中找到。
- 忽略模式 可以减少噪声较大的差异。请参阅 忽略模式。
- JSON 规范化 会将输入转换为规范形式,使比较在语义上更有意义。保存规范化后的文件会用规范化格式重写输入文件。