rebase: introduce a dedicated backend for --preserve-merges
[gitweb.git] / sequencer.c
index a7832399b1f324560d4b18822eb8665b4a7a050b..01e561bc20ec39587c6b4852c3deff9beb20a3f4 100644 (file)
@@ -2870,6 +2870,18 @@ static int do_merge(struct commit *commit, const char *arg, int arg_len,
                goto leave_merge;
        }
 
+       if (opts->have_squash_onto &&
+           !oidcmp(&head_commit->object.oid, &opts->squash_onto)) {
+               /*
+                * When the user tells us to "merge" something into a
+                * "[new root]", let's simply fast-forward to the merge head.
+                */
+               rollback_lock_file(&lock);
+               ret = fast_forward_to(&merge_commit->object.oid,
+                                      &head_commit->object.oid, 0, opts);
+               goto leave_merge;
+       }
+
        if (commit) {
                const char *message = get_commit_buffer(commit, NULL);
                const char *body;
@@ -3891,7 +3903,8 @@ static int make_script_with_merges(struct pretty_print_context *pp,
                }
 
                if (!commit)
-                       fprintf(out, "%s onto\n", cmd_reset);
+                       fprintf(out, "%s %s\n", cmd_reset,
+                               rebase_cousins ? "onto" : "[new root]");
                else {
                        const char *to = NULL;