diff options
-rwxr-xr-x | git-stash.sh | 4 | ||||
-rwxr-xr-x | t/t3903-stash.sh | 14 |
2 files changed, 17 insertions, 1 deletions
diff --git a/git-stash.sh b/git-stash.sh index 13711764a9..2fb651b2b8 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -314,7 +314,9 @@ push_stash () { if test "$keep_index" = "t" && test -n "$i_tree" then - git read-tree --reset -u $i_tree + git read-tree --reset $i_tree + git ls-files -z --modified -- "$@" | + git checkout-index -z --force --stdin fi else git apply -R < "$TMP-patch" || diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index 6e15f3d266..b71d1e659e 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -907,4 +907,18 @@ test_expect_success 'stash without verb with pathspec' ' test_path_is_file bar ' +test_expect_success 'stash -k -- <pathspec> leaves unstaged files intact' ' + git reset && + >foo && + >bar && + git add foo bar && + git commit -m "test" && + echo "foo" >foo && + echo "bar" >bar && + git stash -k -- foo && + test "",bar = $(cat foo),$(cat bar) && + git stash pop && + test foo,bar = $(cat foo),$(cat bar) +' + test_done |