mirror of
https://github.com/git/git.git
synced 2024-12-01 05:54:16 +08:00
Merge branch 'aw/numbered-stash'
The user always has to say "stash@{$N}" when naming a single element in the default location of the stash, i.e. reflogs in refs/stash. The "git stash" command learned to accept "git stash apply 4" as a short-hand for "git stash apply stash@{4}". * aw/numbered-stash: stash: allow stashes to be referenced by index only
This commit is contained in:
commit
9fa1f902bf
@ -39,7 +39,8 @@ The latest stash you created is stored in `refs/stash`; older
|
||||
stashes are found in the reflog of this reference and can be named using
|
||||
the usual reflog syntax (e.g. `stash@{0}` is the most recently
|
||||
created stash, `stash@{1}` is the one before it, `stash@{2.hours.ago}`
|
||||
is also possible).
|
||||
is also possible). Stashes may also be referenced by specifying just the
|
||||
stash index (e.g. the integer `n` is equivalent to `stash@{n}`).
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
|
15
git-stash.sh
15
git-stash.sh
@ -384,9 +384,8 @@ parse_flags_and_rev()
|
||||
i_tree=
|
||||
u_tree=
|
||||
|
||||
REV=$(git rev-parse --no-flags --symbolic --sq "$@") || exit 1
|
||||
|
||||
FLAGS=
|
||||
REV=
|
||||
for opt
|
||||
do
|
||||
case "$opt" in
|
||||
@ -404,6 +403,9 @@ parse_flags_and_rev()
|
||||
die "$(eval_gettext "unknown option: \$opt")"
|
||||
FLAGS="${FLAGS}${FLAGS:+ }$opt"
|
||||
;;
|
||||
*)
|
||||
REV="${REV}${REV:+ }'$opt'"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
@ -422,6 +424,15 @@ parse_flags_and_rev()
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$1" in
|
||||
*[!0-9]*)
|
||||
:
|
||||
;;
|
||||
*)
|
||||
set -- "${ref_stash}@{$1}"
|
||||
;;
|
||||
esac
|
||||
|
||||
REV=$(git rev-parse --symbolic --verify --quiet "$1") || {
|
||||
reference="$1"
|
||||
die "$(eval_gettext "\$reference is not a valid reference")"
|
||||
|
@ -131,6 +131,26 @@ test_expect_success 'drop middle stash' '
|
||||
test 1 = $(git show HEAD:file)
|
||||
'
|
||||
|
||||
test_expect_success 'drop middle stash by index' '
|
||||
git reset --hard &&
|
||||
echo 8 >file &&
|
||||
git stash &&
|
||||
echo 9 >file &&
|
||||
git stash &&
|
||||
git stash drop 1 &&
|
||||
test 2 = $(git stash list | wc -l) &&
|
||||
git stash apply &&
|
||||
test 9 = $(cat file) &&
|
||||
test 1 = $(git show :file) &&
|
||||
test 1 = $(git show HEAD:file) &&
|
||||
git reset --hard &&
|
||||
git stash drop &&
|
||||
git stash apply &&
|
||||
test 3 = $(cat file) &&
|
||||
test 1 = $(git show :file) &&
|
||||
test 1 = $(git show HEAD:file)
|
||||
'
|
||||
|
||||
test_expect_success 'stash pop' '
|
||||
git reset --hard &&
|
||||
git stash pop &&
|
||||
@ -604,6 +624,21 @@ test_expect_success 'invalid ref of the form stash@{n}, n >= N' '
|
||||
git stash drop
|
||||
'
|
||||
|
||||
test_expect_success 'invalid ref of the form "n", n >= N' '
|
||||
git stash clear &&
|
||||
test_must_fail git stash drop 0 &&
|
||||
echo bar5 >file &&
|
||||
echo bar6 >file2 &&
|
||||
git add file2 &&
|
||||
git stash &&
|
||||
test_must_fail git stash drop 1 &&
|
||||
test_must_fail git stash pop 1 &&
|
||||
test_must_fail git stash apply 1 &&
|
||||
test_must_fail git stash show 1 &&
|
||||
test_must_fail git stash branch tmp 1 &&
|
||||
git stash drop
|
||||
'
|
||||
|
||||
test_expect_success 'stash branch should not drop the stash if the branch exists' '
|
||||
git stash clear &&
|
||||
echo foo >file &&
|
||||
|
Loading…
Reference in New Issue
Block a user