summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/reset.c7
-rwxr-xr-xt/t7102-reset.sh11
2 files changed, 15 insertions, 3 deletions
diff --git a/builtin/reset.c b/builtin/reset.c
index 4fd1c6c51d..f4e087596b 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 bc0846f435..450529404c 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