Skip to content

Commit bdcfcc2

Browse files
dschodscho
authored andcommitted
Update manual pages (manually forced rebuild)
Updated via the `update-git-version-and-manual-pages.yml` GitHub workflow.
1 parent d2257a5 commit bdcfcc2

File tree

6,638 files changed

+5876964
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

6,638 files changed

+5876964
-0
lines changed
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
MERGE STRATEGIES
2+
----------------
3+
4+
The merge mechanism (`git merge` and `git pull` commands) allows the
5+
backend 'merge strategies' to be chosen with `-s` option. Some strategies
6+
can also take their own options, which can be passed by giving `-X<option>`
7+
arguments to `git merge` and/or `git pull`.
8+
9+
resolve::
10+
This can only resolve two heads (i.e. the current branch
11+
and another branch you pulled from) using a 3-way merge
12+
algorithm. It tries to carefully detect criss-cross
13+
merge ambiguities and is considered generally safe and
14+
fast.
15+
16+
recursive::
17+
This can only resolve two heads using a 3-way merge
18+
algorithm. When there is more than one common
19+
ancestor that can be used for 3-way merge, it creates a
20+
merged tree of the common ancestors and uses that as
21+
the reference tree for the 3-way merge. This has been
22+
reported to result in fewer merge conflicts without
23+
causing mismerges by tests done on actual merge commits
24+
taken from Linux 2.6 kernel development history.
25+
Additionally this can detect and handle merges involving
26+
renames, but currently cannot make use of detected
27+
copies. This is the default merge strategy when pulling
28+
or merging one branch.
29+
+
30+
The 'recursive' strategy can take the following options:
31+
32+
ours;;
33+
This option forces conflicting hunks to be auto-resolved cleanly by
34+
favoring 'our' version. Changes from the other tree that do not
35+
conflict with our side are reflected to the merge result.
36+
For a binary file, the entire contents are taken from our side.
37+
+
38+
This should not be confused with the 'ours' merge strategy, which does not
39+
even look at what the other tree contains at all. It discards everything
40+
the other tree did, declaring 'our' history contains all that happened in it.
41+
42+
theirs;;
43+
This is the opposite of 'ours'; note that, unlike 'ours', there is
44+
no 'theirs' merge strategy to confuse this merge option with.
45+
46+
patience;;
47+
With this option, 'merge-recursive' spends a little extra time
48+
to avoid mismerges that sometimes occur due to unimportant
49+
matching lines (e.g., braces from distinct functions). Use
50+
this when the branches to be merged have diverged wildly.
51+
See also linkgit:git-diff[1] `--patience`.
52+
53+
diff-algorithm=[patience|minimal|histogram|myers];;
54+
Tells 'merge-recursive' to use a different diff algorithm, which
55+
can help avoid mismerges that occur due to unimportant matching
56+
lines (such as braces from distinct functions). See also
57+
linkgit:git-diff[1] `--diff-algorithm`.
58+
59+
ignore-space-change;;
60+
ignore-all-space;;
61+
ignore-space-at-eol;;
62+
ignore-cr-at-eol;;
63+
Treats lines with the indicated type of whitespace change as
64+
unchanged for the sake of a three-way merge. Whitespace
65+
changes mixed with other changes to a line are not ignored.
66+
See also linkgit:git-diff[1] `-b`, `-w`,
67+
`--ignore-space-at-eol`, and `--ignore-cr-at-eol`.
68+
+
69+
* If 'their' version only introduces whitespace changes to a line,
70+
'our' version is used;
71+
* If 'our' version introduces whitespace changes but 'their'
72+
version includes a substantial change, 'their' version is used;
73+
* Otherwise, the merge proceeds in the usual way.
74+
75+
renormalize;;
76+
This runs a virtual check-out and check-in of all three stages
77+
of a file when resolving a three-way merge. This option is
78+
meant to be used when merging branches with different clean
79+
filters or end-of-line normalization rules. See "Merging
80+
branches with differing checkin/checkout attributes" in
81+
linkgit:gitattributes[5] for details.
82+
83+
no-renormalize;;
84+
Disables the `renormalize` option. This overrides the
85+
`merge.renormalize` configuration variable.
86+
87+
no-renames;;
88+
Turn off rename detection. This overrides the `merge.renames`
89+
configuration variable.
90+
See also linkgit:git-diff[1] `--no-renames`.
91+
92+
find-renames[=<n>];;
93+
Turn on rename detection, optionally setting the similarity
94+
threshold. This is the default. This overrides the
95+
'merge.renames' configuration variable.
96+
See also linkgit:git-diff[1] `--find-renames`.
97+
98+
rename-threshold=<n>;;
99+
Deprecated synonym for `find-renames=<n>`.
100+
101+
subtree[=<path>];;
102+
This option is a more advanced form of 'subtree' strategy, where
103+
the strategy makes a guess on how two trees must be shifted to
104+
match with each other when merging. Instead, the specified path
105+
is prefixed (or stripped from the beginning) to make the shape of
106+
two trees to match.
107+
108+
octopus::
109+
This resolves cases with more than two heads, but refuses to do
110+
a complex merge that needs manual resolution. It is
111+
primarily meant to be used for bundling topic branch
112+
heads together. This is the default merge strategy when
113+
pulling or merging more than one branch.
114+
115+
ours::
116+
This resolves any number of heads, but the resulting tree of the
117+
merge is always that of the current branch head, effectively
118+
ignoring all changes from all other branches. It is meant to
119+
be used to supersede old development history of side
120+
branches. Note that this is different from the -Xours option to
121+
the 'recursive' merge strategy.
122+
123+
subtree::
124+
This is a modified recursive strategy. When merging trees A and
125+
B, if B corresponds to a subtree of A, B is first adjusted to
126+
match the tree structure of A, instead of reading the trees at
127+
the same level. This adjustment is also done to the common
128+
ancestor tree.
129+
130+
With the strategies that use 3-way merge (including the default, 'recursive'),
131+
if a change is made on both branches, but later reverted on one of the
132+
branches, that change will be present in the merged result; some people find
133+
this behavior confusing. It occurs because only the heads and the merge base
134+
are considered when performing a merge, not the individual commits. The merge
135+
algorithm therefore considers the reverted change as no change at all, and
136+
substitutes the changed version instead.

0 commit comments

Comments
 (0)