blob: 1f1c33d0da30dbdf90c37bd808eb52059b598c84 [file] [log] [blame]
Daniel Barkalow3d89cb42005-09-05 02:05:17 -04001Trivial merge rules
2===================
3
4This document describes the outcomes of the trivial merge logic in read-tree.
5
6One-way merge
7-------------
8
9This replaces the index with a different tree, keeping the stat info
10for entries that don't change, and allowing -u to make the minimum
11required changes to the working tree to have it match.
12
Daniel Barkalow7061f5c2005-09-24 23:50:04 -040013Entries marked '+' have stat information. Spaces marked '*' don't
14affect the result.
15
Daniel Barkalow3d89cb42005-09-05 02:05:17 -040016 index tree result
17 -----------------------
18 * (empty) (empty)
19 (empty) tree tree
20 index+ tree tree
21 index+ index index+
22
23Two-way merge
24-------------
25
Daniel Barkalow7061f5c2005-09-24 23:50:04 -040026It is permitted for the index to lack an entry; this does not prevent
27any case from applying.
Daniel Barkalow3d89cb42005-09-05 02:05:17 -040028
Daniel Barkalow7061f5c2005-09-24 23:50:04 -040029If the index exists, it is an error for it not to match either the old
30or the result.
31
32If multiple cases apply, the one used is listed first.
33
34A result which changes the index is an error if the index is not empty
Martin Ågren7560f542017-08-23 19:49:35 +020035and not up to date.
Daniel Barkalow7061f5c2005-09-24 23:50:04 -040036
37Entries marked '+' have stat information. Spaces marked '*' don't
38affect the result.
39
40 case index old new result
41 -------------------------------------
42 0/2 (empty) * (empty) (empty)
43 1/3 (empty) * new new
44 4/5 index+ (empty) (empty) index+
45 6/7 index+ (empty) index index+
46 10 index+ index (empty) (empty)
47 14/15 index+ old old index+
48 18/19 index+ old index index+
49 20 index+ index new new
Daniel Barkalow3d89cb42005-09-05 02:05:17 -040050
51Three-way merge
52---------------
53
54It is permitted for the index to lack an entry; this does not prevent
55any case from applying.
56
57If the index exists, it is an error for it not to match either the
58head or (if the merge is trivial) the result.
59
60If multiple cases apply, the one used is listed first.
61
62A result of "no merge" means that index is left in stage 0, ancest in
63stage 1, head in stage 2, and remote in stage 3 (if any of these are
64empty, no entry is left for that stage). Otherwise, the given entry is
65left in stage 0, and there are no other entries.
66
67A result of "no merge" is an error if the index is not empty and not
Martin Ågren7560f542017-08-23 19:49:35 +020068up to date.
Daniel Barkalow3d89cb42005-09-05 02:05:17 -040069
70*empty* means that the tree must not have a directory-file conflict
71 with the entry.
72
Daniel Barkalow7061f5c2005-09-24 23:50:04 -040073For multiple ancestors, a '+' means that this case applies even if
74only one ancestor or remote fits; a '^' means all of the ancestors
75must be the same.
Daniel Barkalow3d89cb42005-09-05 02:05:17 -040076
Thomas Ackermann5316c8e2012-10-16 19:24:16 +020077 case ancest head remote result
78 ----------------------------------------
79 1 (empty)+ (empty) (empty) (empty)
80 2ALT (empty)+ *empty* remote remote
81 2 (empty)^ (empty) remote no merge
82 3ALT (empty)+ head *empty* head
83 3 (empty)^ head (empty) no merge
84 4 (empty)^ head remote no merge
85 5ALT * head head head
86 6 ancest+ (empty) (empty) no merge
87 8 ancest^ (empty) ancest no merge
88 7 ancest+ (empty) remote no merge
89 10 ancest^ ancest (empty) no merge
90 9 ancest+ head (empty) no merge
91 16 anc1/anc2 anc1 anc2 no merge
92 13 ancest+ head ancest head
93 14 ancest+ ancest remote remote
94 11 ancest+ head remote no merge
Daniel Barkalow3d89cb42005-09-05 02:05:17 -040095
96Only #2ALT and #3ALT use *empty*, because these are the only cases
97where there can be conflicts that didn't exist before. Note that we
98allow directory-file conflicts between things in different stages
99after the trivial merge.
100
101A possible alternative for #6 is (empty), which would make it like
102#1. This is not used, due to the likelihood that it arises due to
103moving the file to multiple different locations or moving and deleting
104it in different branches.
105
106Case #1 is included for completeness, and also in case we decide to
107put on '+' markings; any path that is never mentioned at all isn't
108handled.
109
110Note that #16 is when both #13 and #14 apply; in this case, we refuse
111the trivial merge, because we can't tell from this data which is
112right. This is a case of a reverted patch (in some direction, maybe
113multiple times), and the right answer depends on looking at crossings
114of history or common ancestors of the ancestors.
115
Daniel Barkalow7061f5c2005-09-24 23:50:04 -0400116Note that, between #6, #7, #9, and #11, all cases not otherwise
117covered are handled in this table.
118
119For #8 and #10, there is alternative behavior, not currently
120implemented, where the result is (empty). As currently implemented,
121the automatic merge will generally give this effect.