Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions include/git2/merge.h
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,37 @@ GIT_EXTERN(int) git_merge_base_many(
/**
* Find all merge bases given a list of commits
*
* This behaves similar to [`git merge-base`](https://git-scm.com/docs/git-merge-base#_discussion).
*
* Given three commits `a`, `b`, and `c`, `merge_base_many`
* will compute a hypothetical commit `m`, which is a merge between `b`
* and `c`.

* For example, with the following topology:
* ```text
* o---o---o---o---C
* /
* / o---o---o---B
* / /
* ---2---1---o---o---o---A
* ```
*
* the result of `merge_base_many` given `a`, `b`, and `c` is 1. This is
* because the equivalent topology with the imaginary merge commit `m`
* between `b` and `c` is:
* ```text
* o---o---o---o---o
* / \
* / o---o---o---o---M
* / /
* ---2---1---o---o---o---A
* ```
*
* and the result of `merge_base_many` given `a` and `m` is 1.
*
* If you're looking to recieve the common ancestor between all the
* given commits, use `merge_base_octopus`.
*
* @param out array in which to store the resulting ids
* @param repo the repository where the commits exist
* @param length The number of commits in the provided `input_array`
Expand Down