aboutsummaryrefslogtreecommitdiff
path: root/t/t3903-stash.sh
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2015-04-22 15:31:02 -0400
committerJunio C Hamano <gitster@pobox.com>2015-04-22 13:38:58 -0700
commited178ef13a26136d86ff4e33bb7b1afb5033f908 (patch)
tree9f938feddf21fa4a73cfa243d46ecb54639176c0 /t/t3903-stash.sh
parent88bab59c5bf8de2a1577c3134f4dff1e225409e2 (diff)
downloadgit-ed178ef13a26136d86ff4e33bb7b1afb5033f908.tar.gz
git-ed178ef13a26136d86ff4e33bb7b1afb5033f908.tar.xz
stash: require a clean index to apply
If you have staged contents in your index and run "stash apply", we may hit a conflict and put new entries into the index. Recovering to your original state is difficult at that point, because tools like "git reset --keep" will blow away anything staged. We can make this safer by refusing to apply when there are staged changes. It's possible we could provide better tooling here, as "git stash apply" should be writing only conflicts to the index (so we know that any stage-0 entries are potentially precious). But it is the odd duck; most "mergy" commands will update the index for cleanly merged entries, and it is not worth updating our tooling to support this use case which is unlikely to be of interest (besides which, we would still need to block a dirty index for "stash apply --index", since that case _would_ be ambiguous). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t3903-stash.sh')
-rwxr-xr-xt/t3903-stash.sh7
1 files changed, 7 insertions, 0 deletions
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index f179c93dd..0746eeeff 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -45,6 +45,13 @@ test_expect_success 'applying bogus stash does nothing' '
test_cmp expect file
'
+test_expect_success 'apply requires a clean index' '
+ test_when_finished "git reset --hard" &&
+ echo changed >other-file &&
+ git add other-file &&
+ test_must_fail git stash apply
+'
+
test_expect_success 'apply does not need clean working directory' '
echo 4 >other-file &&
git stash apply &&