aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2025-04-17 10:28:18 -0700
committerJunio C Hamano <gitster@pobox.com>2025-04-17 10:28:18 -0700
commitc3ebf18eb2deac595bd2550c1076247d8cbf2bc1 (patch)
treecbfe05bc8f89b8bde1e37b1a1e9cbfc3089f0f17 /Documentation
parentfe7ae3b87ef866e4818a106e8ce6e3d821ed76d7 (diff)
parent170e30d6957e1f7b8d88046ae122f98d57dca988 (diff)
downloadgit-c3ebf18eb2deac595bd2550c1076247d8cbf2bc1.tar.gz
Merge branch 'en/merge-recursive-debug'
Remove remnants of the recursive merge strategy backend, which was superseded by the ort merge strategy. * en/merge-recursive-debug: builtin/{merge,rebase,revert}: remove GIT_TEST_MERGE_ALGORITHM tests: remove GIT_TEST_MERGE_ALGORITHM and test_expect_merge_algorithm merge-recursive.[ch]: thoroughly debug these merge, sequencer: switch recursive merges over to ort sequencer: switch non-recursive merges over to ort merge-ort: enable diff-algorithms other than histogram builtin/merge-recursive: switch to using merge_ort_generic() checkout: replace merge_trees() with merge_ort_nonrecursive()
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/merge-strategies.adoc51
-rw-r--r--Documentation/technical/sparse-checkout.adoc2
2 files changed, 20 insertions, 33 deletions
diff --git a/Documentation/merge-strategies.adoc b/Documentation/merge-strategies.adoc
index 59f5ae36cc..9e034f447e 100644
--- a/Documentation/merge-strategies.adoc
+++ b/Documentation/merge-strategies.adoc
@@ -87,44 +87,33 @@ no-renames;;
configuration variable.
See also linkgit:git-diff[1] `--no-renames`.
-subtree[=<path>];;
- This option is a more advanced form of 'subtree' strategy, where
- the strategy makes a guess on how two trees must be shifted to
- match with each other when merging. Instead, the specified path
- is prefixed (or stripped from the beginning) to make the shape of
- two trees to match.
-
-recursive::
- This can only resolve two heads using a 3-way merge
- algorithm. When there is more than one common
- ancestor that can be used for 3-way merge, it creates a
- merged tree of the common ancestors and uses that as
- the reference tree for the 3-way merge. This has been
- reported to result in fewer merge conflicts without
- causing mismerges by tests done on actual merge commits
- taken from Linux 2.6 kernel development history.
- Additionally this can detect and handle merges involving
- renames. It does not make use of detected copies. This was
- the default strategy for resolving two heads from Git v0.99.9k
- until v2.33.0.
-+
-For a path that is a submodule, the same caution as 'ort' applies to this
-strategy.
-+
-The 'recursive' strategy takes the same options as 'ort'. However,
-there are two additional options that 'ort' ignores (not documented
-above) that are potentially useful with the 'recursive' strategy:
+histogram;;
+ Deprecated synonym for `diff-algorithm=histogram`.
patience;;
Deprecated synonym for `diff-algorithm=patience`.
-diff-algorithm=[patience|minimal|histogram|myers];;
+diff-algorithm=[histogram|minimal|myers|patience];;
Use a different diff algorithm while merging, which can help
avoid mismerges that occur due to unimportant matching lines
(such as braces from distinct functions). See also
linkgit:git-diff[1] `--diff-algorithm`. Note that `ort`
- specifically uses `diff-algorithm=histogram`, while `recursive`
- defaults to the `diff.algorithm` config setting.
+ defaults to `diff-algorithm=histogram`, while regular diffs
+ currently default to the `diff.algorithm` config setting.
+
+subtree[=<path>];;
+ This option is a more advanced form of 'subtree' strategy, where
+ the strategy makes a guess on how two trees must be shifted to
+ match with each other when merging. Instead, the specified path
+ is prefixed (or stripped from the beginning) to make the shape of
+ two trees to match.
+
+recursive::
+ This is now a synonym for `ort`. It was an alternative
+ implementation until v2.49.0, but was redirected to mean `ort`
+ in v2.50.0. The previous recursive strategy was the default
+ strategy for resolving two heads from Git v0.99.9k until
+ v2.33.0.
resolve::
This can only resolve two heads (i.e. the current branch
@@ -145,7 +134,7 @@ ours::
ignoring all changes from all other branches. It is meant to
be used to supersede old development history of side
branches. Note that this is different from the -Xours option to
- the 'recursive' merge strategy.
+ the 'ort' merge strategy.
subtree::
This is a modified `ort` strategy. When merging trees A and
diff --git a/Documentation/technical/sparse-checkout.adoc b/Documentation/technical/sparse-checkout.adoc
index d968659354..dc2e763bbe 100644
--- a/Documentation/technical/sparse-checkout.adoc
+++ b/Documentation/technical/sparse-checkout.adoc
@@ -356,8 +356,6 @@ understanding these differences can be beneficial.
The behavior for these commands somewhat depends upon the merge
strategy being used:
* `ort` behaves as described above
- * `recursive` tries to not vivify files unnecessarily, but does sometimes
- vivify files without conflicts.
* `octopus` and `resolve` will always vivify any file changed in the merge
relative to the first parent, which is rather suboptimal.