このドキュメントでは、read-tree でのtrivial(些細な)マージロジックの結果について説明します。
One-way merge
これにより、インデックスが別のツリーに置き換えられ、そして、変更されないエントリの統計情報は保持され、そして -u
は作業ツリーに必要最小限の変更を加えてインデックスと一致させることができます。
+
とマークされたエントリには、統計情報があります。 *
とマークされた空白欄は結果に影響しません。
index tree result
-----------------------
* (empty) (empty)
(empty) tree tree
index+ tree tree
index+ index index+
Two-way merge
インデックスにエントリがないことは許可されています。 これにより、任意のケースの適用が妨げられることはありません。
インデックスが存在する場合、古いものと結果のどちらとも一致しないのはエラーです。
複数のケースが当てはまる場合は、使用されたケースが最初にリストされます。
インデックスが空でなく、最新でない場合、インデックスを変更する結果はエラーになります。
+
とマークされたエントリには、統計情報があります。 *
とマークされた空白欄は結果に影響しません。
case index old new result
-------------------------------------
0/2 (empty) * (empty) (empty)
1/3 (empty) * new new
4/5 index+ (empty) (empty) index+
6/7 index+ (empty) index index+
10 index+ index (empty) (empty)
14/15 index+ old old index+
18/19 index+ old index index+
20 index+ index new new
Three-way merge
インデックスにエントリがないことは許可されています。 これにより、任意のケースの適用が妨げられることはありません。
インデックスが存在する場合、ヘッドまたは、(マージがtrivial(些細な)の場合は)結果のいずれとも一致しないのはエラーです。
複数のケースが当てはまる場合は、使用されたケースが最初にリストされます。
「no merge」(マージなし)の結果は、インデックスがステージ0に残され、かつ、祖先がステージ1に、かつ、ヘッドがステージ2に、かつ、リモートがステージ3に残されることを意味します(これらのいずれかが空の場合、そのステージのエントリは残されません)。 それ以外の場合、指定されたエントリはステージ0に残され、他のエントリはありません。
インデックスが空でなく、最新でない場合、「no merge」(マージなし)の結果はエラーになります。
*empty*
は、ツリーに、エントリとディレクトリファイルの競合があっては
ならないことを意味します。
複数の祖先の場合、 +
は、1つの祖先またはリモートが適合する場合でもこのケースが適用されることを意味します。 ^
は、すべての祖先が同じでなければならないことを意味します。
case ancest head remote result
----------------------------------------
1 (empty)+ (empty) (empty) (empty)
2ALT (empty)+ *empty* remote remote
2 (empty)^ (empty) remote no merge
3ALT (empty)+ head *empty* head
3 (empty)^ head (empty) no merge
4 (empty)^ head remote no merge
5ALT * head head head
6 ancest+ (empty) (empty) no merge
8 ancest^ (empty) ancest no merge
7 ancest+ (empty) remote no merge
10 ancest^ ancest (empty) no merge
9 ancest+ head (empty) no merge
16 anc1/anc2 anc1 anc2 no merge
13 ancest+ head ancest head
14 ancest+ ancest remote remote
11 ancest+ head remote no merge
#2ALT と #3ALT のみが *empty*
を使用します。これは、これらが以前には存在しなかった競合が発生する可能性がある唯一のケースであるためです。 注意: trivial(些細な)マージの後、さまざまな段階でディレクトリとファイルの競合が発生する可能性があることに注意してください。
#6 の可能な代替案は (empty)
で、これは #1 のようになります。 これは、ファイルを複数の異なる場所に移動したり、異なるブランチでファイルを移動および削除したりすることで発生する可能性があるため、使用されません。
完全を期すために、また +
マークを付けることにした場合に備えて、ケース #1 が含まれています。 まったく言及されていないパスは処理されません。
注意: #16 は、 #13 と #14 の両方が適用される場合であることに注意してください。 この場合、このデータからはどちらが正しいかわからないため、trivial(些細な)マージを拒否します。 これは、元に戻したパッチ(reverted patch)(いくつかの方向、場合によっては複数回)の場合であり、正しい答えは、履歴の交差または祖先の共通の祖先を調べることに依存します。
注意: #6 と #7 と #9 と #11 の間では、他でカバーされていないすべてのケースがこの表で処理されることに注意してください。
#8 と #10 には、現在実装されていない代替動作があり、結果は (empty)
になります。 現在の実装では、自動マージは通常この効果をもたらします。