テキストマージ
テキストマージ は、ファイルの 2 つのバージョンに含まれる変更を、1 つの編集可能な結果にまとめます。競合 は、2 つの変更が両立せず、どちらを採用するか判断が必要なときに発生します。
レイアウト
この画面には、同じファイルの 3 つのバージョンが表示されます。
- 左ペイン は、ローカルの変更を含むあなたのバージョンです。
- 中央ペイン は結果です。編集できるのはこのペインだけです。
- 右ペイン は、リモートの変更を含む受信側のバージョンです。
マージのレイアウトは 2 種類あります。
- 挿入ギャップ付きマージ は、明示的なギャップ行を使って 3 つのペインを整列させます。
- コネクタ付きマージ は、関連する変更が各ペイン間でどう対応しているかを示すためにコネクタ列を使います。
切り替えには 表示 メニュー、または右上のセグメントコントロールを使います。
ベース
さらに 4 つ目のバージョンとして ベース があります。これは両側の変更が始まる前の元のバージョンです。これは Git の 3-way merge モデルと一致します。
Local → Base ← Remote
↓
Result
ABDiff では、中央ペインを結果とベースの間で切り替えられるため、何が変わったのかを理解しやすくなります。
競合とは何か
競合は、両側が同じ行を異なる形で変更したときに起こります。たとえば元の値が “blue” で、片方が “green”、もう片方が “red” に変えた場合です。Git はどちらが正しいか判断できないため、手動での解決が必要になります。
これは 2 人が同じ行を同時に編集したときに起こります。変更が重ならなければ Git が自動的にマージしますが、重なっている場合は手動で解決しなければなりません。
競合を解決する
Git を設定済み であれば、Git が競合を見つけたときに ABDiff が起動します。結果エリアは未解決のまま残るため、その内容を決めるのがあなたの作業です。方法は 3 つあります。
- ローカル側のバージョンで解決する
- 受信側のバージョンで解決する
- 自分で結果を書く
- 選択中の行を編集する(Return またはダブルクリック)
- あるいは、どちらかの側から行をコピーする: 右クリック ▸ 選択を結果へコピー (⌘→ / ⌘←)
ヒント:
- 複数行を一度にコピーするには、選択を拡張します (⇧↑ / ⇧↓)。
- どの変更も ⌘Z で取り消せます。
解決済みにする
終わったらファイルを保存します(ファイル ▸ 保存 または ⌘S)。これにより Git に競合が解決済みだと伝わります。
競合を解決したくない場合は、保存せずにそのまま閉じてください。
編集と移動
ナビゲーション
| 操作 | ショートカット |
|---|---|
| 前 / 次の行 | ↑ / ↓ |
| 前 / 次のペイン | ← / → |
| 最初 / 最後の行へ移動 | ⌘↑ / ⌘↓ |
| 前 / 次の変更 | ⌥↑ / ⌥↓ |
| 前 / 次のハンク | ⌥↑ / ⌥↓ |
| 別のペインへ切り替え | ⇥ |
コピー
| 操作 | ショートカット |
|---|---|
| 選択を結果へコピー | ⌘← ⌘→ |
| 選択を拡張 | ⇧↑ / ⇧↓ |
| 自分の / 相手のバージョンで解決 | ⇧⌘→ / ⇧⌘← |
選択中の行 は灰色の矩形で表示されます。ハンク は、連続した競合または変更のブロックです。コピー操作は、結果ペインを変更する場合にのみ有効で、かつ選択が実際の行にある必要があります。Shift クリックでも同じペイン内で現在の選択を拡張できます。
変更をコピーするには:
- コピー を使って現在選択中の行をコピーします。
- ハンク全体をコピー を使って、選択行を含むブロック全体をコピーします。
- 現在の選択範囲内で右クリックすると選択は維持されます。別の場所で右クリックすると、その行が先に選択されます。
- 行のコンテキストメニューには、Shift + 矢印の移動が可能な場合 上へ選択を拡張 / 下へ選択を拡張 も表示されます。
- 選択した行に対して 次で解決 を使います。行を右クリックするか、編集 ▸ 次で解決 を使います。
すべてのコピー操作は ⌘Z で取り消せます。
編集
| 操作 | ショートカット |
|---|---|
| 選択中の結果行の編集を始める | Return |
| 任意の結果行を直接編集する | 行をダブルクリック |
| 確定して次の編集可能行へ進む | Return(編集中) |
| 確定して編集モードを終了する | Command-Return |
| 現在の行バッファを破棄して編集モードを終了する | Esc または Command-. |
編集は行のダブルクリックでも開始できます。すべての編集操作は ⌘Z で取り消せます。
表示オプション
テキストマージには、比較の計算方法や表示方法を変更するオプションがあります。これらはオプションメニューから利用できます。
- 無視パターン はノイズの多い差分を減らします。無視パターン を参照してください。
- JSON 正規化 は入力を正規化された形式に変換し、比較を意味的に有用にします。正規化されたファイルを保存すると、入力ファイルは正規化された形式で書き換えられます。