In particular, a stash created with git stash create cannot be used as an argument to git stash branch because of two separate reasons. 1. a pre-condition assumes that there is always a stash on the stack when git stash branch is called, which is not necessarily true 2. the cleanup code assumes the specified stash is a stash reference, rather than an arbitrary commit. The tests test_expect_failure tests in this patch demonstrate these issues. --- t/t3903-stash.sh | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index 62e208a..7fea2a2 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -378,4 +378,32 @@ test_expect_failure 'stash file to directory' ' test foo = "$(cat file/file)" ' +test_expect_failure 'stash branch from arbitrary stash ref when there are no stash references' ' + git stash clear && + test_when_finished "git reset --hard HEAD" && + git reset --hard && + echo foo >> file && + git tag stash-tag $(git stash create) && + test_when_finished "git tag -d stash-tag" && + git reset --hard && + test_when_finished "git reset --hard HEAD && git checkout master" && + git stash branch stash-branch $(git rev-parse stash-tag) && + test $(git ls-files --modified) -eq 1 +' + +test_expect_failure 'stash branch from arbitrary stash ref fails even if there is a stash' ' + git stash clear && + test_when_finished "git reset --hard HEAD" && + git reset --hard && + echo foo >> file && + git stash && + echo bar >> file && + git tag stash-tag $(git stash create) && + test_when_finished "git tag -d stash-tag" && + git reset --hard && + git stash branch stash-branch $(git rev-parse stash-tag) && + test_when_finished "git reset --hard HEAD && git checkout master && git branch -D stash-branch" && + test $(git ls-files --modified) -eq 1 +' + test_done -- 1.7.2 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html