Thanks Junio for the review and the squashable diff with the fix for my errors. I changed it a tiny bit, to use git stash push instead of git stash, so the complete diff could go into 4/6, where I think I think the test fits best. Interdiff below: diff --git a/git-stash.sh b/git-stash.sh index 28d0624c75..207c8126f4 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -300,6 +300,8 @@ push_stash () { if test $# != 0 then git reset ${GIT_QUIET:+-q} -- "$@" + git ls-files -z --modified -- "$@" | + git checkout-index -z --force --stdin git checkout ${GIT_QUIET:+-q} HEAD -- $(git ls-files -z --modified "$@") git clean --force ${GIT_QUIET:+-q} -d -- "$@" else diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index f7733b4dd4..89877e4b52 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -842,6 +842,22 @@ test_expect_success 'stash with file including $IFS character' ' test_path_is_file bar ' +test_expect_success 'stash with pathspec matching multiple paths' ' + echo original >file && + echo original >other-file && + git commit -m "two" file other-file && + echo modified >file && + echo modified >other-file && + git stash push -- "*file" && + echo original >expect && + test_cmp expect file && + test_cmp expect other-file && + git stash pop && + echo modified >expect && + test_cmp expect file && + test_cmp expect other-file +' + test_expect_success 'stash push -p with pathspec shows no changes only once' ' >foo && git add foo && Thomas Gummerer (6): stash: introduce push verb stash: add test for the create command line arguments stash: refactor stash_create stash: teach 'push' (and 'create_stash') to honor pathspec stash: use stash_push for no verb form stash: allow pathspecs in the no verb form Documentation/git-stash.txt | 25 +++++-- git-stash.sh | 116 +++++++++++++++++++++++++------ t/t3903-stash.sh | 138 ++++++++++++++++++++++++++++++++++++- t/t3905-stash-include-untracked.sh | 26 +++++++ 4 files changed, 275 insertions(+), 30 deletions(-) -- 2.12.0.428.g67fe103aa