about summary refs log tree commit diff
path: root/third_party/git/Documentation/technical/trivial-merge.txt
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/Documentation/technical/trivial-merge.txt')
-rw-r--r--third_party/git/Documentation/technical/trivial-merge.txt121
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 1f1c33d0da..0000000000
--- 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.