566c511195
Also document the recently added -Xtheirs, -Xours and -Xsubtree[=path] options to the merge-recursive strategy. Signed-off-by: Avery Pennarun <apenwarr@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
71 lines
2.8 KiB
Plaintext
71 lines
2.8 KiB
Plaintext
MERGE STRATEGIES
|
|
----------------
|
|
|
|
The merge mechanism ('git-merge' and 'git-pull' commands) allows the
|
|
backend 'merge strategies' to be chosen with `-s` option. Some strategies
|
|
can also take their own options, which can be passed by giving `-X<option>`
|
|
arguments to 'git-merge' and/or 'git-pull'.
|
|
|
|
resolve::
|
|
This can only resolve two heads (i.e. the current branch
|
|
and another branch you pulled from) using a 3-way merge
|
|
algorithm. It tries to carefully detect criss-cross
|
|
merge ambiguities and is considered generally safe and
|
|
fast.
|
|
|
|
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 mis-merges by tests done on actual merge commits
|
|
taken from Linux 2.6 kernel development history.
|
|
Additionally this can detect and handle merges involving
|
|
renames. This is the default merge strategy when
|
|
pulling or merging one branch.
|
|
+
|
|
The 'recursive' strategy can take the following options:
|
|
|
|
ours;;
|
|
This option forces conflicting hunks to be auto-resolved cleanly by
|
|
favoring 'our' version. Changes from the other tree that do not
|
|
conflict with our side are reflected to the merge result.
|
|
+
|
|
This should not be confused with the 'ours' merge strategy, which does not
|
|
even look at what the other tree contains at all. It discards everything
|
|
the other tree did, declaring 'our' history contains all that happened in it.
|
|
|
|
theirs;;
|
|
This is opposite of 'ours'.
|
|
|
|
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.
|
|
|
|
octopus::
|
|
This resolves cases with more than two heads, but refuses to do
|
|
a complex merge that needs manual resolution. It is
|
|
primarily meant to be used for bundling topic branch
|
|
heads together. This is the default merge strategy when
|
|
pulling or merging more than one branch.
|
|
|
|
ours::
|
|
This resolves any number of heads, but the resulting tree of the
|
|
merge is always that of the current branch head, effectively
|
|
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.
|
|
|
|
subtree::
|
|
This is a modified recursive strategy. When merging trees A and
|
|
B, if B corresponds to a subtree of A, B is first adjusted to
|
|
match the tree structure of A, instead of reading the trees at
|
|
the same level. This adjustment is also done to the common
|
|
ancestor tree.
|