git-stash: add new 'drop' subcommand
This allows a single stash entry to be deleted. It takes an optional argument which is a stash reflog entry. If no arguments are supplied, it drops the most recent stash entry. Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
55f1056537
commit
e25d5f9c82
@ -8,7 +8,7 @@ git-stash - Stash the changes in a dirty working directory away
|
|||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
--------
|
--------
|
||||||
[verse]
|
[verse]
|
||||||
'git-stash' (list | show [<stash>] | apply [<stash>] | clear)
|
'git-stash' (list | show [<stash>] | apply [<stash>] | clear | drop [<stash>])
|
||||||
'git-stash' [save [<message>]]
|
'git-stash' [save [<message>]]
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
@ -85,6 +85,11 @@ clear::
|
|||||||
Remove all the stashed states. Note that those states will then
|
Remove all the stashed states. Note that those states will then
|
||||||
be subject to pruning, and may be difficult or impossible to recover.
|
be subject to pruning, and may be difficult or impossible to recover.
|
||||||
|
|
||||||
|
drop [<stash>]::
|
||||||
|
|
||||||
|
Remove a single stashed state from the stash list. When no `<stash>`
|
||||||
|
is given, it removes the latest one. i.e. `stash@\{0}`
|
||||||
|
|
||||||
|
|
||||||
DISCUSSION
|
DISCUSSION
|
||||||
----------
|
----------
|
||||||
|
28
git-stash.sh
28
git-stash.sh
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Copyright (c) 2007, Nanako Shiraishi
|
# Copyright (c) 2007, Nanako Shiraishi
|
||||||
|
|
||||||
USAGE='[ | save | list | show | apply | clear | create ]'
|
USAGE='[ | save | list | show | apply | clear | drop | create ]'
|
||||||
|
|
||||||
SUBDIRECTORY_OK=Yes
|
SUBDIRECTORY_OK=Yes
|
||||||
OPTIONS_SPEC=
|
OPTIONS_SPEC=
|
||||||
@ -196,6 +196,28 @@ apply_stash () {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drop_stash () {
|
||||||
|
have_stash || die 'No stash entries to drop'
|
||||||
|
|
||||||
|
if test $# = 0
|
||||||
|
then
|
||||||
|
set x "$ref_stash@{0}"
|
||||||
|
shift
|
||||||
|
fi
|
||||||
|
# Verify supplied argument looks like a stash entry
|
||||||
|
s=$(git rev-parse --revs-only --no-flags "$@") &&
|
||||||
|
git rev-parse --verify "$s:" > /dev/null 2>&1 &&
|
||||||
|
git rev-parse --verify "$s^1:" > /dev/null 2>&1 &&
|
||||||
|
git rev-parse --verify "$s^2:" > /dev/null 2>&1 ||
|
||||||
|
die "$*: not a valid stashed state"
|
||||||
|
|
||||||
|
git reflog delete --updateref --rewrite "$@" &&
|
||||||
|
echo "Dropped $* ($s)" || die "$*: Could not drop stash entry"
|
||||||
|
|
||||||
|
# clear_stash if we just dropped the last stash entry
|
||||||
|
git rev-parse --verify "$ref_stash@{0}" > /dev/null 2>&1 || clear_stash
|
||||||
|
}
|
||||||
|
|
||||||
# Main command set
|
# Main command set
|
||||||
case "$1" in
|
case "$1" in
|
||||||
list)
|
list)
|
||||||
@ -230,6 +252,10 @@ create)
|
|||||||
fi
|
fi
|
||||||
create_stash "$*" && echo "$w_commit"
|
create_stash "$*" && echo "$w_commit"
|
||||||
;;
|
;;
|
||||||
|
drop)
|
||||||
|
shift
|
||||||
|
drop_stash "$@"
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
if test $# -eq 0
|
if test $# -eq 0
|
||||||
then
|
then
|
||||||
|
Loading…
Reference in New Issue
Block a user