コンテンツへスキップ

3方向テキストマージ & コンフリクトビューア

共通ベース・自分のバージョン・受信バージョンを貼り付けて「テキストをマージ」を押します。片側だけの行変更は 1 つの結果に統合され、同じ行を両方が変更した箇所は競合マーカーで囲まれるので、コピー前に内容を確認できます。

ブラウザ内でローカルに実行
1共通ベース2テキストをマージ3マージ後のテキスト

共通ベースベース
自分のバージョン自分側
相手のバージョン相手側
マージ後のテキスト
競合の詳細

    共通ベースに対して 2 つの編集版をマージする手順

    このワークベンチは 3 つのプレーンテキストを 1 行ずつ比較します。2 つの版が分岐する前の共通ベース、自分のバージョン、受信バージョンです。片側だけの変更はそのまま結果に取り込まれ、両側が同じ範囲を書き換えた場合は、どちらかを推測せず両方の案を競合ブロックとして残します。

    マージ結果の隣には 3 つのカウンターと競合一覧が並び、各競合の出力行とベース行がわかります。比較はページ内で実行されるためテキストはブラウザーの外に出ず、コピーまたはダウンロードで次の工程に渡せます。

    1. 1 つ目の欄に共通ベース、2 つ目に自分のバージョン、3 つ目に受信バージョンを貼り付けます。Windows の CRLF と Unix の改行のどちらも読み取り、長いファイルもそのまま貼り付けられます。
    2. 「テキストをマージ」を押します。片側だけの変更はすでに統合され、両側が触れた箇所は競合マーカーで囲まれたブロックになります。
    3. 結果の下のカウンター(競合・変更領域・行)と「競合の詳細」を確認します。競合の詳細には、その競合が出力の何行目にあり、ベースのどの行を置き換えたかが表示されます。
    4. 競合ブロックはマージ結果を直接編集して解消するか、入力を変更してもう一度マージします。「クリア」は 3 つの欄・結果・カウンターをすべて空にします。
    5. マージ結果をコピーするか .txt ファイルとしてダウンロードします。インデントの違いを変更として扱いたくない間は「比較時に末尾の空白を無視する」をオンのままにします。

    マージ結果に含まれるものと、処理が止まる条件

    行単位の比較の仕組み

    各バージョンは最長共通部分列による行差分でベースと比較されます。片側だけが変更した範囲はその側から採用し、両側が変更した範囲は 1 つの競合ブロックにまとめるため、隣り合う編集が 2 つのマーカーに分かれることはありません。両側が同じ変更(同じ行の削除を含む)を加えた場合は競合せず統合されます。

    比較は文字単位ではなく行単位です。書き換えた行は変更行として数えられ、マーカーも 1 行として挿入されます。2 つの版は同じベースと比較されるため、互いの編集履歴を知っている必要はありません。

    競合マーカーと 3 つのカウンター

    競合ブロックは <<<<<<< YOUR VERSION の行で始まり、自分の行、||||||| COMMON BASE と元のベース行、区切りの =======、受信側の行、閉じる >>>>>>> INCOMING VERSION の行が続きます。ブロックの外側はすでにマージ済みです。

    カウンターはそれぞれ別のものを数えます。競合はマークされたブロック数、変更領域は 2 つの比較で見つかった変更範囲の数、行はマージ結果の行数です。3 行のファイルで別々の 2 行を変更すると、変更領域 2・競合 0・行 3 になります。同じ 1 行を両側が変更した場合は、その行・ベースの行・受信側の行が 4 本のマーカー行に挟まれて残るため、競合 1・行 9 になります。

    上限・ローカル処理・確認事項

    比較行列はブラウザー内で作られるため、ベースの行数とどちらかの版の行数を掛けた値が 400 万行ペアを超えると比較を拒否します。2,000 行のベースに 2,000 行の 2 版を掛けるマージは Chrome で 0.5 秒ほどで完了し、2,010 行はメッセージとともに拒否され、直前の結果は画面に残さず消去されます。

    マージ時にネットワーク要求は発生しないため、オフラインでも、外部サービスに送れないテキストでも使えます。結果が示すのは 2 つの版がどこで食い違っているかであり、どちらが正しいかではありません。ビルド・設定ファイル・文書に取り込む前に、競合ブロックを必ず確認してください。

    最近使ったツール: