A new option "--fp-only" limits the output to the merge bases that are on the first-parent chain from the branches being merged. Signed-off-by: Junio C Hamano <gitster@xxxxxxxxx> --- Documentation/git-merge-base.txt | 8 +++++++- builtin/merge-base.c | 10 +++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Documentation/git-merge-base.txt b/Documentation/git-merge-base.txt index 808426faac..f99653f138 100644 --- a/Documentation/git-merge-base.txt +++ b/Documentation/git-merge-base.txt @@ -9,7 +9,7 @@ git-merge-base - Find as good common ancestors as possible for a merge SYNOPSIS -------- [verse] -'git merge-base' [-a|--all] <commit> <commit>... +'git merge-base' [-a|--all] [--fp-only] <commit> <commit>... 'git merge-base' [-a|--all] --octopus <commit>... 'git merge-base' --is-ancestor <commit> <commit> 'git merge-base' --independent <commit>... @@ -72,6 +72,12 @@ OPTIONS --all:: Output all merge bases for the commits, instead of just one. +--fp-only:: + Limit the output to merge bases that are on the first-parent + chain from none of the commits given on the command line. + + + DISCUSSION ---------- diff --git a/builtin/merge-base.c b/builtin/merge-base.c index c0d1822eb3..42febb20ff 100644 --- a/builtin/merge-base.c +++ b/builtin/merge-base.c @@ -6,11 +6,12 @@ #include "revision.h" #include "parse-options.h" -static int show_merge_base(struct commit **rev, int rev_nr, int show_all) +static int show_merge_base(struct commit **rev, int rev_nr, int show_all, int fp_only) { struct commit_list *result; + unsigned flags = fp_only ? MB_FPCHAIN : 0; - result = get_merge_bases_many_dirty(rev[0], rev_nr - 1, rev + 1); + result = get_merge_bases_opt(rev[0], rev_nr - 1, rev + 1, flags); if (!result) return 1; @@ -208,10 +209,13 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix) struct commit **rev; int rev_nr = 0; int show_all = 0; + int fp_only = 0; int cmdmode = 0; struct option options[] = { OPT_BOOL('a', "all", &show_all, N_("output all common ancestors")), + OPT_BOOL(0, "fp-only", &fp_only, + N_("limit to bases that are on first-parent chain")), OPT_CMDMODE(0, "octopus", &cmdmode, N_("find ancestors for a single n-way merge"), 'o'), OPT_CMDMODE(0, "independent", &cmdmode, @@ -255,5 +259,5 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix) ALLOC_ARRAY(rev, argc); while (argc-- > 0) rev[rev_nr++] = get_commit_reference(*argv++); - return show_merge_base(rev, rev_nr, show_all); + return show_merge_base(rev, rev_nr, show_all, fp_only); } -- 2.10.1-631-gb2c64dcf30