]> git.ipfire.org Git - thirdparty/git.git/commitdiff
built-in rebase --skip/--abort: clean up stale .git/<name> files
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 12 Nov 2018 23:26:01 +0000 (15:26 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 13 Nov 2018 03:04:00 +0000 (12:04 +0900)
The scripted version of the rebase used to execute `git reset --hard`
when skipping or aborting. When we ported this to C, we did update the
worktree and some reflogs, but we failed to imitate `git reset --hard`'s
behavior regarding files in .git/ such as MERGE_HEAD.

Let's address this oversight.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/rebase.c

index 0ee06aa3631ee89761d570b433994cc77302742e..017dce1b503c3b6c6858b421d42541a88daed88a 100644 (file)
@@ -23,6 +23,7 @@
 #include "revision.h"
 #include "commit-reach.h"
 #include "rerere.h"
+#include "branch.h"
 
 static char const * const builtin_rebase_usage[] = {
        N_("git rebase [-i] [options] [--exec <cmd>] [--onto <newbase>] "
@@ -1002,6 +1003,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
 
                if (reset_head(NULL, "reset", NULL, 0, NULL, NULL) < 0)
                        die(_("could not discard worktree changes"));
+               remove_branch_state();
                if (read_basic_state(&options))
                        exit(1);
                goto run_rebase;
@@ -1019,6 +1021,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
                               options.head_name, 0, NULL, NULL) < 0)
                        die(_("could not move back to %s"),
                            oid_to_hex(&options.orig_head));
+               remove_branch_state();
                ret = finish_rebase(&options);
                goto cleanup;
        }