diff --git a/builtin/reset.c b/builtin/reset.c index 4fd1c6c51d3ce5af60f2978f3839c0e595d3fece..f4e087596b6337d2306af4cf45119752b4a049ea 100644 --- a/builtin/reset.c +++ b/builtin/reset.c @@ -333,7 +333,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix) if (reset_type == NONE) reset_type = MIXED; /* by default */ - if (reset_type != SOFT && reset_type != MIXED) + if (reset_type != SOFT && (reset_type != MIXED || get_git_work_tree())) setup_work_tree(); if (reset_type == MIXED && is_bare_repository()) @@ -356,8 +356,9 @@ int cmd_reset(int argc, const char **argv, const char *prefix) int flags = quiet ? REFRESH_QUIET : REFRESH_IN_PORCELAIN; if (read_from_tree(&pathspec, sha1, intent_to_add)) return 1; - refresh_index(&the_index, flags, NULL, NULL, - _("Unstaged changes after reset:")); + if (get_git_work_tree()) + refresh_index(&the_index, flags, NULL, NULL, + _("Unstaged changes after reset:")); } else { int err = reset_index(sha1, reset_type, quiet); if (reset_type == KEEP && !err) diff --git a/t/t7102-reset.sh b/t/t7102-reset.sh index bc0846f4356e548cc72d3cf0c18ef00c21ede87d..450529404c686469ed5ba5ad465cf8b3ef651ef9 100755 --- a/t/t7102-reset.sh +++ b/t/t7102-reset.sh @@ -550,4 +550,15 @@ test_expect_success 'reset -N keeps removed files as intent-to-add' ' test_cmp expect actual ' +test_expect_success 'reset --mixed sets up work tree' ' + git init mixed_worktree && + ( + cd mixed_worktree && + test_commit dummy + ) && + : >expect && + git --git-dir=mixed_worktree/.git --work-tree=mixed_worktree reset >actual && + test_cmp expect actual +' + test_done