1git-merge-base(1) 2================= 3 4NAME 5---- 6git-merge-base - Find as good common ancestors as possible for a merge 7 8 9SYNOPSIS 10-------- 11[verse] 12'git merge-base' [-a|--all] <commit> <commit>... 13'git merge-base' [-a|--all] --octopus <commit>... 14'git merge-base' --independent <commit>... 15 16DESCRIPTION 17----------- 18 19'git merge-base' finds best common ancestor(s) between two commits to use 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 22that does not have any better common ancestor is a 'best common 23ancestor', i.e. a 'merge base'. Note that there can be more than one 24merge base for a pair of commits. 25 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. 36 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 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 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 53OPTIONS 54------- 55-a:: 56--all:: 57 Output all merge bases for the commits, instead of just one. 58 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 74merge base between 'A' and a hypothetical commit 'M', which is a merge 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 97The result of `git merge-base --octopus A B C` is '2', because '2' is 98the best common ancestor of all commits. 99 100When the history involves criss-cross merges, there can be more than one 101'best' common ancestor for two commits. For example, with this topology: 102 103 ---1---o---A 104 \ / 105 X 106 / \ 107 ---2---o---o---B 108 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, 111it is unspecified which best one is output. 112 113See also 114-------- 115linkgit:git-rev-list[1], 116linkgit:git-show-branch[1], 117linkgit:git-merge[1] 118 119GIT 120--- 121Part of the linkgit:git[1] suite