diff --git a/git-stash.sh b/git-stash.sh index d4cf818be9..cc28368b01 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -442,6 +442,8 @@ 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 f179c93ddf..0746eeeff7 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 &&