summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2015-06-15 14:27:22 -0400
committerJunio C Hamano <gitster@pobox.com>2015-06-15 13:11:17 -0700
commit19376104a8251a7e6c56579cdcd2eb0a106d1fd6 (patch)
tree556c2836d2a935bd743dbca50a8b84fef05130ae
parented178ef13a26136d86ff4e33bb7b1afb5033f908 (diff)
downloadgit-jk/stash-require-clean-index.tar.gz
Revert "stash: require a clean index to apply"jk/stash-require-clean-index
This reverts commit ed178ef13a26136d86ff4e33bb7b1afb5033f908. That commit was an attempt to improve the safety of applying a stash, because the application process may create conflicted index entries, after which it is hard to restore the original index state. Unfortunately, this hurts some common workflows around "git stash -k", like: git add -p ;# (1) stage set of proposed changes git stash -k ;# (2) get rid of everything else make test ;# (3) make sure proposal is reasonable git stash apply ;# (4) restore original working tree If you "git commit" between steps (3) and (4), then this just works. However, if these steps are part of a pre-commit hook, you don't have that opportunity (you have to restore the original state regardless of whether the tests passed or failed). It's possible that we could provide better tools for this sort of workflow. In particular, even before ed178ef, it could fail with a conflict if there were conflicting hunks in the working tree and index (since the "stash -k" puts the index version into the working tree, and we then attempt to apply the differences between HEAD and the old working tree on top of that). But the fact remains that people have been using it happily for a while, and the safety provided by ed178ef is simply not that great. Let's revert it for now. In the long run, people can work on improving stash for this sort of workflow, but the safety tradeoff is not worth it in the meantime. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xgit-stash.sh2
-rwxr-xr-xt/t3903-stash.sh7
2 files changed, 0 insertions, 9 deletions
diff --git a/git-stash.sh b/git-stash.sh
index cc28368b01..d4cf818be9 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -442,8 +442,6 @@ apply_stash () {
assert_stash_like "$@"
git update-index -q --refresh || die "$(gettext "unable to refresh index")"
- git diff-index --cached --quiet --ignore-submodules HEAD -- ||
- die "$(gettext "Cannot apply stash: Your index contains uncommitted changes.")"
# current index state
c_tree=$(git write-tree) ||
diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh
index 0746eeeff7..f179c93ddf 100755
--- a/t/t3903-stash.sh
+++ b/t/t3903-stash.sh
@@ -45,13 +45,6 @@ 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 &&