}
 
 static const char * const merge_base_usage[] = {
-       "git merge-base [-a|--all] <commit> <commit>...",
-       "git merge-base [-a|--all] --octopus <commit>...",
-       "git merge-base --independent <commit>...",
+       N_("git merge-base [-a|--all] <commit> <commit>..."),
+       N_("git merge-base [-a|--all] --octopus <commit>..."),
+       N_("git merge-base --independent <commit>..."),
+       N_("git merge-base --is-ancestor <commit> <commit>"),
        NULL
 };
 
        return 0;
 }
 
+static int handle_is_ancestor(int argc, const char **argv)
+{
+       struct commit *one, *two;
+
+       if (argc != 2)
+               die("--is-ancestor takes exactly two commits");
+       one = get_commit_reference(argv[0]);
+       two = get_commit_reference(argv[1]);
+       if (in_merge_bases(one, two))
+               return 0;
+       else
+               return 1;
+}
+
 int cmd_merge_base(int argc, const char **argv, const char *prefix)
 {
        struct commit **rev;
        int show_all = 0;
        int octopus = 0;
        int reduce = 0;
+       int is_ancestor = 0;
 
        struct option options[] = {
-               OPT_BOOLEAN('a', "all", &show_all, "output all common ancestors"),
-               OPT_BOOLEAN(0, "octopus", &octopus, "find ancestors for a single n-way merge"),
-               OPT_BOOLEAN(0, "independent", &reduce, "list revs not reachable from others"),
+               OPT_BOOLEAN('a', "all", &show_all, N_("output all common ancestors")),
+               OPT_BOOLEAN(0, "octopus", &octopus, N_("find ancestors for a single n-way merge")),
+               OPT_BOOLEAN(0, "independent", &reduce, N_("list revs not reachable from others")),
+               OPT_BOOLEAN(0, "is-ancestor", &is_ancestor,
+                           N_("is the first one ancestor of the other?")),
                OPT_END()
        };
 
        argc = parse_options(argc, argv, prefix, options, merge_base_usage, 0);
        if (!octopus && !reduce && argc < 2)
                usage_with_options(merge_base_usage, options);
+       if (is_ancestor && (show_all | octopus | reduce))
+               die("--is-ancestor cannot be used with other options");
+       if (is_ancestor)
+               return handle_is_ancestor(argc, argv);
        if (reduce && (show_all || octopus))
                die("--independent cannot be used with other options");