]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-merge-base.txt
Merge branch 'kf/post-receive-sample-hook'
[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]
aa8f98c1 12'git merge-base' [-a|--all] [--octopus] <commit> <commit>...
a1e0ad78 13'git merge-base' --independent <commit>...
2cf565c5
DG
14
15DESCRIPTION
16-----------
2aa83961 17
995bdc73 18'git merge-base' finds best common ancestor(s) between two commits to use
99f1c04b
JH
19in a three-way merge. One common ancestor is 'better' than another common
20ancestor if the latter is an ancestor of the former. A common ancestor
29b802aa 21that does not have any better common ancestor is a 'best common
99f1c04b 22ancestor', i.e. a 'merge base'. Note that there can be more than one
29b802aa 23merge base for a pair of commits.
2aa83961 24
aa8f98c1
JN
25Unless `--octopus` is given, among the two commits to compute the merge
26base from, one is specified by the first commit argument on the command
27line; the other commit is a (possibly hypothetical) commit that is a merge
28across all the remaining commits on the command line. As the most common
29special case, specifying only two commits on the command line means
30computing the merge base between the given two commits.
2cf565c5 31
f621a845
MG
32As a consequence, the 'merge base' is not necessarily contained in each of the
33commit arguments if more than two commits are specified. This is different
34from linkgit:git-show-branch[1] when used with the `--merge-base` option.
35
2aa83961
FK
36OPTIONS
37-------
995bdc73 38-a::
2aa83961 39--all::
99f1c04b
JH
40 Output all merge bases for the commits, instead of just one.
41
aa8f98c1
JN
42--octopus::
43 Compute the best common ancestors of all supplied commits,
44 in preparation for an n-way merge. This mimics the behavior
45 of 'git show-branch --merge-base'.
46
a1e0ad78
JN
47--independent::
48 Instead of printing merge bases, print a minimal subset of
49 the supplied commits with the same ancestors. In other words,
50 among the commits given, list those which cannot be reached
51 from any other. This mimics the behavior of 'git show-branch
52 --independent'.
53
99f1c04b
JH
54DISCUSSION
55----------
56
57Given two commits 'A' and 'B', `git merge-base A B` will output a commit
58which is reachable from both 'A' and 'B' through the parent relationship.
59
60For example, with this topology:
61
62 o---o---o---B
63 /
64 ---o---1---o---o---o---A
65
66the merge base between 'A' and 'B' is '1'.
67
68Given three commits 'A', 'B' and 'C', `git merge-base A B C` will compute the
29b802aa 69merge base between 'A' and a hypothetical commit 'M', which is a merge
99f1c04b
JH
70between 'B' and 'C'. For example, with this topology:
71
72 o---o---o---o---C
73 /
74 / o---o---o---B
75 / /
76 ---2---1---o---o---o---A
77
78the result of `git merge-base A B C` is '1'. This is because the
79equivalent topology with a merge commit 'M' between 'B' and 'C' is:
80
81
82 o---o---o---o---o
83 / \
84 / o---o---o---o---M
85 / /
86 ---2---1---o---o---o---A
87
88and the result of `git merge-base A M` is '1'. Commit '2' is also a
89common ancestor between 'A' and 'M', but '1' is a better common ancestor,
90because '2' is an ancestor of '1'. Hence, '2' is not a merge base.
91
92When the history involves criss-cross merges, there can be more than one
29b802aa 93'best' common ancestor for two commits. For example, with this topology:
99f1c04b
JH
94
95 ---1---o---A
96 \ /
97 X
98 / \
99 ---2---o---o---B
100
29b802aa
RW
101both '1' and '2' are merge-bases of A and B. Neither one is better than
102the other (both are 'best' merge bases). When the `--all` option is not given,
99f1c04b 103it is unspecified which best one is output.
2cf565c5
DG
104
105Author
106------
107Written by Linus Torvalds <torvalds@osdl.org>
108
109Documentation
110--------------
111Documentation by David Greaves, Junio C Hamano and the git-list <git@vger.kernel.org>.
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