checkout: clear commit marks after detached-orphan check
[gitweb.git] / builtin / checkout.c
index 2bf02f2841a84a2a86de08e53328dbbb87ff3587..f88d2c84a56e757e08be13df645e285496c05cfd 100644 (file)
@@ -603,6 +603,16 @@ static int add_one_ref_to_rev_list_arg(const char *refname,
        return 0;
 }
 
+static int clear_commit_marks_from_one_ref(const char *refname,
+                                     const unsigned char *sha1,
+                                     int flags,
+                                     void *cb_data)
+{
+       struct commit *commit = lookup_commit_reference_gently(sha1, 1);
+       if (commit)
+               clear_commit_marks(commit, -1);
+       return 0;
+}
 
 static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
 {
@@ -674,6 +684,9 @@ static void orphaned_commit_warning(struct commit *commit)
                suggest_reattach(commit, &revs);
        else
                describe_detached_head("Previous HEAD position was", commit);
+
+       clear_commit_marks(commit, -1);
+       for_each_ref(clear_commit_marks_from_one_ref, NULL);
 }
 
 static int switch_branches(struct checkout_opts *opts, struct branch_info *new)