Merge branch 'ah/rebase-keep-base-fix' into maint
"git rebase --keep-base <upstream> <branch-to-rebase>" computed the commit to rebase onto incorrectly, which has been corrected. source: <20220421044233.894255-1-alexhenrie24@gmail.com> * ah/rebase-keep-base-fix: rebase: use correct base for --keep-base when a branch is given
This commit is contained in:
@ -1583,33 +1583,6 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
||||
options.upstream_arg = "--root";
|
||||
}
|
||||
|
||||
/* Make sure the branch to rebase onto is valid. */
|
||||
if (keep_base) {
|
||||
strbuf_reset(&buf);
|
||||
strbuf_addstr(&buf, options.upstream_name);
|
||||
strbuf_addstr(&buf, "...");
|
||||
options.onto_name = xstrdup(buf.buf);
|
||||
} else if (!options.onto_name)
|
||||
options.onto_name = options.upstream_name;
|
||||
if (strstr(options.onto_name, "...")) {
|
||||
if (get_oid_mb(options.onto_name, &merge_base) < 0) {
|
||||
if (keep_base)
|
||||
die(_("'%s': need exactly one merge base with branch"),
|
||||
options.upstream_name);
|
||||
else
|
||||
die(_("'%s': need exactly one merge base"),
|
||||
options.onto_name);
|
||||
}
|
||||
options.onto = lookup_commit_or_die(&merge_base,
|
||||
options.onto_name);
|
||||
} else {
|
||||
options.onto =
|
||||
lookup_commit_reference_by_name(options.onto_name);
|
||||
if (!options.onto)
|
||||
die(_("Does not point to a valid commit '%s'"),
|
||||
options.onto_name);
|
||||
}
|
||||
|
||||
/*
|
||||
* If the branch to rebase is given, that is the branch we will rebase
|
||||
* branch_name -- branch/commit being rebased, or
|
||||
@ -1659,6 +1632,34 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
|
||||
} else
|
||||
BUG("unexpected number of arguments left to parse");
|
||||
|
||||
/* Make sure the branch to rebase onto is valid. */
|
||||
if (keep_base) {
|
||||
strbuf_reset(&buf);
|
||||
strbuf_addstr(&buf, options.upstream_name);
|
||||
strbuf_addstr(&buf, "...");
|
||||
strbuf_addstr(&buf, branch_name);
|
||||
options.onto_name = xstrdup(buf.buf);
|
||||
} else if (!options.onto_name)
|
||||
options.onto_name = options.upstream_name;
|
||||
if (strstr(options.onto_name, "...")) {
|
||||
if (get_oid_mb(options.onto_name, &merge_base) < 0) {
|
||||
if (keep_base)
|
||||
die(_("'%s': need exactly one merge base with branch"),
|
||||
options.upstream_name);
|
||||
else
|
||||
die(_("'%s': need exactly one merge base"),
|
||||
options.onto_name);
|
||||
}
|
||||
options.onto = lookup_commit_or_die(&merge_base,
|
||||
options.onto_name);
|
||||
} else {
|
||||
options.onto =
|
||||
lookup_commit_reference_by_name(options.onto_name);
|
||||
if (!options.onto)
|
||||
die(_("Does not point to a valid commit '%s'"),
|
||||
options.onto_name);
|
||||
}
|
||||
|
||||
if (options.fork_point > 0) {
|
||||
struct commit *head =
|
||||
lookup_commit_reference(the_repository,
|
||||
|
Reference in New Issue
Block a user