Documentation / git-merge-base.txton commit Merge branch 'jn/maint-format-patch-doc' into maint (4bbfd8e)
   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