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] [--octopus] <commit> <commit>... 13'git merge-base' --independent <commit>... 14 15DESCRIPTION 16----------- 17 18'git merge-base' finds best common ancestor(s) between two commits to use 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 21that does not have any better common ancestor is a 'best common 22ancestor', i.e. a 'merge base'. Note that there can be more than one 23merge base for a pair of commits. 24 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. 31 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 36OPTIONS 37------- 38-a:: 39--all:: 40 Output all merge bases for the commits, instead of just one. 41 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 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 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 69merge base between 'A' and a hypothetical commit 'M', which is a merge 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 93'best' common ancestor for two commits. For example, with this topology: 94 95 ---1---o---A 96 \ / 97 X 98 / \ 99 ---2---o---o---B 100 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, 103it is unspecified which best one is output. 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 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