Daniel <mjucde@xxxxx> writes: > Does this patch help? There actually is no point running parse_commit() at that point, as the code obtained old->commit from lookup_commit_reference_gently() in switch_branches() which must have already parsed it. We do use it to try switching the branches before falling back to the --merge mode (or we notice old->commit does not exist and switch from an empty tree). Instead of silently dying without diagnosing what paths are problematic like your patch does, we can unsquelch the error from the unpack_tree() we run before falling back to the --merge mode, and allow it to notice and report the paths that will be overwritten (since you do not have HEAD, everything in the work tree will be overwritten). Perhaps like this. builtin-checkout.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/builtin-checkout.c b/builtin-checkout.c index 64f3a11..2708669 100644 --- a/builtin-checkout.c +++ b/builtin-checkout.c @@ -397,7 +397,7 @@ static int merge_working_tree(struct checkout_opts *opts, topts.initial_checkout = is_cache_unborn(); topts.update = 1; topts.merge = 1; - topts.gently = opts->merge; + topts.gently = opts->merge && old->commit; topts.verbose_update = !opts->quiet; topts.fn = twoway_merge; topts.dir = xcalloc(1, sizeof(*topts.dir)); @@ -422,7 +422,13 @@ static int merge_working_tree(struct checkout_opts *opts, struct merge_options o; if (!opts->merge) return 1; - parse_commit(old->commit); + + /* + * Without old->commit, the below is the same as + * the two-tree unpack we already tried and failed. + */ + if (!old->commit) + return 1; /* Do more real merge */ -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html