]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-merge-base.txt
get_merge_bases_many(): walk from many tips in parallel
[thirdparty/git.git] / Documentation / git-merge-base.txt
CommitLineData
2cf565c5
DG
1git-merge-base(1)
2=================
2cf565c5
DG
3
4NAME
5----
c3f0baac 6git-merge-base - Find as good common ancestors as possible for a merge
2cf565c5
DG
7
8
9SYNOPSIS
10--------
a1e0ad78 11[verse]
57294824
VR
12'git merge-base' [-a|--all] <commit> <commit>...
13'git merge-base' [-a|--all] --octopus <commit>...
a1e0ad78 14'git merge-base' --independent <commit>...
2cf565c5
DG
15
16DESCRIPTION
17-----------
2aa83961 18
995bdc73 19'git merge-base' finds best common ancestor(s) between two commits to use
99f1c04b
JH
20in a three-way merge. One common ancestor is 'better' than another common
21ancestor if the latter is an ancestor of the former. A common ancestor
29b802aa 22that does not have any better common ancestor is a 'best common
99f1c04b 23ancestor', i.e. a 'merge base'. Note that there can be more than one
29b802aa 24merge base for a pair of commits.
2aa83961 25
ded7e049
JN
26OPERATION MODE
27--------------
28
29As the most common special case, specifying only two commits on the
30command line means computing the merge base between the given two commits.
31
32More generally, among the two commits to compute the merge base from,
33one is specified by the first commit argument on the command line;
34the other commit is a (possibly hypothetical) commit that is a merge
35across all the remaining commits on the command line.
2cf565c5 36
f621a845
MG
37As a consequence, the 'merge base' is not necessarily contained in each of the
38commit arguments if more than two commits are specified. This is different
39from linkgit:git-show-branch[1] when used with the `--merge-base` option.
40
aa8f98c1
JN
41--octopus::
42 Compute the best common ancestors of all supplied commits,
43 in preparation for an n-way merge. This mimics the behavior
44 of 'git show-branch --merge-base'.
45
a1e0ad78
JN
46--independent::
47 Instead of printing merge bases, print a minimal subset of
48 the supplied commits with the same ancestors. In other words,
49 among the commits given, list those which cannot be reached
50 from any other. This mimics the behavior of 'git show-branch
51 --independent'.
52
ded7e049
JN
53OPTIONS
54-------
55-a::
56--all::
57 Output all merge bases for the commits, instead of just one.
58
99f1c04b
JH
59DISCUSSION
60----------
61
62Given two commits 'A' and 'B', `git merge-base A B` will output a commit
63which is reachable from both 'A' and 'B' through the parent relationship.
64
65For example, with this topology:
66
67 o---o---o---B
68 /
69 ---o---1---o---o---o---A
70
71the merge base between 'A' and 'B' is '1'.
72
73Given three commits 'A', 'B' and 'C', `git merge-base A B C` will compute the
29b802aa 74merge base between 'A' and a hypothetical commit 'M', which is a merge
99f1c04b
JH
75between 'B' and 'C'. For example, with this topology:
76
77 o---o---o---o---C
78 /
79 / o---o---o---B
80 / /
81 ---2---1---o---o---o---A
82
83the result of `git merge-base A B C` is '1'. This is because the
84equivalent topology with a merge commit 'M' between 'B' and 'C' is:
85
86
87 o---o---o---o---o
88 / \
89 / o---o---o---o---M
90 / /
91 ---2---1---o---o---o---A
92
93and the result of `git merge-base A M` is '1'. Commit '2' is also a
94common ancestor between 'A' and 'M', but '1' is a better common ancestor,
95because '2' is an ancestor of '1'. Hence, '2' is not a merge base.
96
57294824
VR
97The result of `git merge-base --octopus A B C` is '2', because '2' is
98the best common ancestor of all commits.
99
99f1c04b 100When the history involves criss-cross merges, there can be more than one
29b802aa 101'best' common ancestor for two commits. For example, with this topology:
99f1c04b
JH
102
103 ---1---o---A
104 \ /
105 X
106 / \
107 ---2---o---o---B
108
29b802aa
RW
109both '1' and '2' are merge-bases of A and B. Neither one is better than
110the other (both are 'best' merge bases). When the `--all` option is not given,
99f1c04b 111it is unspecified which best one is output.
2cf565c5 112
1846e9ed
JN
113See also
114--------
115linkgit:git-rev-list[1],
116linkgit:git-show-branch[1],
117linkgit:git-merge[1]
118
2cf565c5
DG
119GIT
120---
9e1f0a85 121Part of the linkgit:git[1] suite