diff options
Diffstat (limited to 'third_party/git/Documentation/technical/trivial-merge.txt')
-rw-r--r-- | third_party/git/Documentation/technical/trivial-merge.txt | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/third_party/git/Documentation/technical/trivial-merge.txt b/third_party/git/Documentation/technical/trivial-merge.txt deleted file mode 100644 index 1f1c33d0da30..000000000000 --- a/third_party/git/Documentation/technical/trivial-merge.txt +++ /dev/null @@ -1,121 +0,0 @@ -Trivial merge rules -=================== - -This document describes the outcomes of the trivial merge logic in read-tree. - -One-way merge -------------- - -This replaces the index with a different tree, keeping the stat info -for entries that don't change, and allowing -u to make the minimum -required changes to the working tree to have it match. - -Entries marked '+' have stat information. Spaces marked '*' don't -affect the result. - - index tree result - ----------------------- - * (empty) (empty) - (empty) tree tree - index+ tree tree - index+ index index+ - -Two-way merge -------------- - -It is permitted for the index to lack an entry; this does not prevent -any case from applying. - -If the index exists, it is an error for it not to match either the old -or the result. - -If multiple cases apply, the one used is listed first. - -A result which changes the index is an error if the index is not empty -and not up to date. - -Entries marked '+' have stat information. Spaces marked '*' don't -affect the result. - - 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 ---------------- - -It is permitted for the index to lack an entry; this does not prevent -any case from applying. - -If the index exists, it is an error for it not to match either the -head or (if the merge is trivial) the result. - -If multiple cases apply, the one used is listed first. - -A result of "no merge" means that index is left in stage 0, ancest in -stage 1, head in stage 2, and remote in stage 3 (if any of these are -empty, no entry is left for that stage). Otherwise, the given entry is -left in stage 0, and there are no other entries. - -A result of "no merge" is an error if the index is not empty and not -up to date. - -*empty* means that the tree must not have a directory-file conflict - with the entry. - -For multiple ancestors, a '+' means that this case applies even if -only one ancestor or remote fits; a '^' means all of the ancestors -must be the same. - - 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 - -Only #2ALT and #3ALT use *empty*, because these are the only cases -where there can be conflicts that didn't exist before. Note that we -allow directory-file conflicts between things in different stages -after the trivial merge. - -A possible alternative for #6 is (empty), which would make it like -#1. This is not used, due to the likelihood that it arises due to -moving the file to multiple different locations or moving and deleting -it in different branches. - -Case #1 is included for completeness, and also in case we decide to -put on '+' markings; any path that is never mentioned at all isn't -handled. - -Note that #16 is when both #13 and #14 apply; in this case, we refuse -the trivial merge, because we can't tell from this data which is -right. This is a case of a reverted patch (in some direction, maybe -multiple times), and the right answer depends on looking at crossings -of history or common ancestors of the ancestors. - -Note that, between #6, #7, #9, and #11, all cases not otherwise -covered are handled in this table. - -For #8 and #10, there is alternative behavior, not currently -implemented, where the result is (empty). As currently implemented, -the automatic merge will generally give this effect. |