8 共通の祖先からのマージ

2人が同じファイルのコピーをそれぞれ変更した場合、diff3 は両方の変更を含むマージ結果を、競合についての警告とともに生成できます。

3つを超えるファイルを同時に比較する diff4 や diff5 といった名前のプログラムを想像するかもしれませんが、実際にはその必要はめったにありません。ファイルへの3組以上の変更は、diff3 を使って2組ずつマージできます。

diff3 は、2つの変更版の変更を、共通する以前の版に取り込めます。これによって2つの新しいファイルが表す変更の集合をマージできます。共通の祖先の版を第2引数に、2つの新しい版を第1引数と第3引数に、次のように指定します。

diff3 mine older yours

引数がアルファベット順になっていると覚えると、順序を思い出せます。

これは、yours から older を引いた結果を mine に加えること、または older を yours に変える変更を mine へマージすることと考えられます。このマージは、それぞれの変更の近くで mine と older が一致している限り、明確に定まります。3つの入力ファイルがすべて異なる場合や、older だけが異なる場合には一致せず、これを 競合 と呼びます。3つの入力ファイルがすべて異なる場合、その競合を 重複 と呼びます。

diff3 は重複や競合を扱う方法をいくつか提供します。重複または競合を省いたり、重複だけを選んだり、特別な「<<<<<<<」「>>>>>>>」行で競合を示したりできます。

diff3 はマージ結果を ed スクリプトとして出力できます。これを最初のファイルに適用すると、マージ済みの出力が得られます。ただし、通常は diff3 にマージ済みの出力を直接生成させる方がよく、ed に伴ういくつかの問題を避けられます。