blob: b295bf83302de3fdac2833df756799a7aad6b404 [file] [log] [blame]
Junio C Hamano1a4e8412005-12-27 08:17:231git-merge-base(1)
2=================
3
4NAME
5----
Junio C Hamano7c73c662007-01-19 00:37:506git-merge-base - Find as good common ancestors as possible for a merge
Junio C Hamano1a4e8412005-12-27 08:17:237
8
9SYNOPSIS
10--------
Junio C Hamano2db3e752010-09-03 21:33:0611[verse]
Junio C Hamanob77f8192011-05-05 01:30:3812'git merge-base' [-a|--all] <commit> <commit>...
13'git merge-base' [-a|--all] --octopus <commit>...
Junio C Hamano2db3e752010-09-03 21:33:0614'git merge-base' --independent <commit>...
Junio C Hamano1a4e8412005-12-27 08:17:2315
16DESCRIPTION
17-----------
Junio C Hamano6959c6c2006-05-17 10:34:1118
Junio C Hamanofd9274d2009-08-05 21:21:3919'git merge-base' finds best common ancestor(s) between two commits to use
Junio C Hamano3f2f6e52008-08-21 10:34:2220in 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
Junio C Hamanoec87f522008-12-10 08:35:2522that does not have any better common ancestor is a 'best common
Junio C Hamano3f2f6e52008-08-21 10:34:2223ancestor', i.e. a 'merge base'. Note that there can be more than one
Junio C Hamanoec87f522008-12-10 08:35:2524merge base for a pair of commits.
Junio C Hamano6959c6c2006-05-17 10:34:1125
Junio C Hamanob77f8192011-05-05 01:30:3826OPERATION 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.
Junio C Hamano1a4e8412005-12-27 08:17:2336
Junio C Hamanofd9274d2009-08-05 21:21:3937As 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
Junio C Hamano2db3e752010-09-03 21:33:0641--octopus::
42Compute the best common ancestors of all supplied commits,
43in preparation for an n-way merge. This mimics the behavior
44of 'git show-branch --merge-base'.
45
46--independent::
47Instead of printing merge bases, print a minimal subset of
48the supplied commits with the same ancestors. In other words,
49among the commits given, list those which cannot be reached
50from any other. This mimics the behavior of 'git show-branch
51--independent'.
52
Junio C Hamanob77f8192011-05-05 01:30:3853OPTIONS
54-------
55-a::
56--all::
57Output all merge bases for the commits, instead of just one.
58
Junio C Hamano3f2f6e52008-08-21 10:34:2259DISCUSSION
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
Junio C Hamanoec87f522008-12-10 08:35:2574merge base between 'A' and a hypothetical commit 'M', which is a merge
Junio C Hamano3f2f6e52008-08-21 10:34:2275between '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
Junio C Hamanob77f8192011-05-05 01:30:3897The result of `git merge-base --octopus A B C` is '2', because '2' is
98the best common ancestor of all commits.
99
Junio C Hamano3f2f6e52008-08-21 10:34:22100When the history involves criss-cross merges, there can be more than one
Junio C Hamanoec87f522008-12-10 08:35:25101'best' common ancestor for two commits. For example, with this topology:
Junio C Hamano3f2f6e52008-08-21 10:34:22102
103 ---1---o---A
104 \ /
105 X
106 / \
107 ---2---o---o---B
108
Junio C Hamanoec87f522008-12-10 08:35:25109both '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,
Junio C Hamano3f2f6e52008-08-21 10:34:22111it is unspecified which best one is output.
Junio C Hamano1a4e8412005-12-27 08:17:23112
Junio C Hamano2db3e752010-09-03 21:33:06113See also
114--------
115linkgit:git-rev-list[1],
116linkgit:git-show-branch[1],
117linkgit:git-merge[1]
118
Junio C Hamano1a4e8412005-12-27 08:17:23119GIT
120---
Junio C Hamanof7c042d2008-06-06 22:50:53121Part of the linkgit:git[1] suite