diff options
author | Thomas Gummerer <t.gummerer@gmail.com> | 2017-02-28 20:33:40 +0000 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-02-28 14:21:10 -0800 |
commit | 9e140909f611fff720efc914b7186b8e4ab722cd (patch) | |
tree | 82d6ae0ad2a22e348cb3ceabb114fb066a7c32a4 | |
parent | 1ada5020b38c520f665259f6d9b3955672b92761 (diff) | |
download | git-9e140909f611fff720efc914b7186b8e4ab722cd.tar.gz |
stash: allow pathspecs in the no verb formtg/stash-push
Now that stash_push is used in the no verb form of stash, allow
specifying the command line for this form as well. Always use -- to
disambiguate pathspecs from other non-option arguments.
Also make git stash -p an alias for git stash push -p. This allows
users to use git stash -p <pathspec>.
Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r-- | Documentation/git-stash.txt | 11 | ||||
-rwxr-xr-x | git-stash.sh | 3 | ||||
-rwxr-xr-x | t/t3903-stash.sh | 15 |
3 files changed, 25 insertions, 4 deletions
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.txt index 4d8d30f179..70191d06b6 100644 --- a/Documentation/git-stash.txt +++ b/Documentation/git-stash.txt @@ -54,10 +54,13 @@ push [-p|--patch] [-k|--[no-]keep-index] [-u|--include-untracked] [-a|--all] [-q Save your local modifications to a new 'stash' and roll them back to HEAD (in the working tree and in the index). The <message> part is optional and gives - the description along with the stashed state. For quickly making - a snapshot, you can omit _both_ "save" and <message>, but giving - only <message> does not trigger this action to prevent a misspelled - subcommand from making an unwanted stash. + the description along with the stashed state. ++ +For quickly making a snapshot, you can omit "push". In this mode, +non-option arguments are not allowed to prevent a misspelled +subcommand from making an unwanted stash. The two exceptions to this +are `stash -p` which acts as alias for `stash push -p` and pathspecs, +which are allowed after a double hyphen `--` for disambiguation. + When pathspec is given to 'git stash push', the new stash records the modified states only for the files that match the pathspec. The index diff --git a/git-stash.sh b/git-stash.sh index 2b74d733b1..9c70662cc8 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -656,12 +656,15 @@ apply_to_branch () { } } +test "$1" = "-p" && set "push" "$@" + PARSE_CACHE='--not-parsed' # The default command is "push" if nothing but options are given seen_non_option= for opt do case "$opt" in + --) break ;; -*) ;; *) seen_non_option=t; break ;; esac diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index e875fe8259..89877e4b52 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -892,4 +892,19 @@ test_expect_success 'untracked files are left in place when -u is not given' ' test_path_is_file untracked ' +test_expect_success 'stash without verb with pathspec' ' + >"foo bar" && + >foo && + >bar && + git add foo* && + git stash -- "foo b*" && + test_path_is_missing "foo bar" && + test_path_is_file foo && + test_path_is_file bar && + git stash pop && + test_path_is_file "foo bar" && + test_path_is_file foo && + test_path_is_file bar +' + test_done |