From: Pratik Karki Date: Wed, 8 Aug 2018 15:36:32 +0000 (+0545) Subject: builtin rebase: fast-forward to onto if it is a proper descendant X-Git-Tag: v2.20.0-rc0~90^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7eecfa56017017208fd71c7aad9310a582a558ad;p=git builtin rebase: fast-forward to onto if it is a proper descendant When trying to rebase onto a direct descendant of HEAD, we can take a shortcut and fast-forward instead. This commit makes it so. Signed-off-by: Pratik Karki Signed-off-by: Junio C Hamano --- diff --git a/builtin/rebase.c b/builtin/rebase.c index 49856d9bf7..7522be837c 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -1368,6 +1368,24 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) die(_("Could not detach HEAD")); strbuf_release(&msg); + /* + * If the onto is a proper descendant of the tip of the branch, then + * we just fast-forwarded. + */ + strbuf_reset(&msg); + if (!oidcmp(&merge_base, &options.orig_head)) { + printf(_("Fast-forwarded %s to %s. \n"), + branch_name, options.onto_name); + strbuf_addf(&msg, "rebase finished: %s onto %s", + options.head_name ? options.head_name : "detached HEAD", + oid_to_hex(&options.onto->object.oid)); + reset_head(NULL, "Fast-forwarded", options.head_name, 0, + "HEAD", msg.buf); + strbuf_release(&msg); + ret = !!finish_rebase(&options); + goto cleanup; + } + strbuf_addf(&revisions, "%s..%s", options.root ? oid_to_hex(&options.onto->object.oid) : (options.restrict_revision ?