threads / discuss / 18254

Confusing `stash apply` behavior

Subject: Confusing `stash apply` behavior

## tl;dr

3 messages between Mar 10, 2009 and Mar 11, 2009.

replies: 2people: 2as markdown or json

Tim Visher· Mar 10, 2009, 19:46 UTC · lore
Hello Everyone,

I was just trying to do some experimentation with `stash` and I've run into a problem.

I was working on my `master` branch and decided that I wanted to
create a `dev` branch.  I did `git stash` and then `git checkout -b
dev`.  Then I did `git stash apply` and everything worked as expected.
 I continued working but then realized that I wanted a `refactoring`
branch.  In the process of continuing to work I had also cleared the
stash stack with `git stash clear`, although this had no visible
effect other than to remove any entries from `git stash list`.  As
before, I did `git stash` and then `git checkout -b refactoring` and
here lies my problem.
When I do `git stash apply`, it deletes the file I'm working with.
    $ ls
    featureList.txt*  keycontrol.mdb*
    $ git show stash@{0}
    commit b3c0f4b9b3c3ef7741a03fb27174f5838abc939d
    Merge: 9fb9886 112bba9
    Author: Tim Visher <timothy.visher@fms.treas.gov>
    Date:   Tue Mar 10 15:25:04 2009 -0400
    WIP on dev: 9fb9886 Added DB Lock file to .gitignore. EOM
    diff --cc keycontrol.mdb
    index 68a9bac,68a9bac..0000000
    --- a/keycontrol.mdb
    +++ b/keycontrol.mdb
    $ git stash apply
    Removing keycontrol.mdb
    # On branch refactoring
    # Changed but not updated:
    #   (use "git add/rm <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working
directory)
    #
    #       deleted:    keycontrol.mdb
    #
    no changes added to commit (use "git add" and/or "git commit -a")

Considering the output of `git show` I would expect that the contents of the stash are, well, what I expect them to be: a new version of keycontrol.mdb.

I'm sure I'm missing something completely juvenile but I could really use some help because that stash represents about an hours worth of work. Not something to totally loose sleep over but something that would be nicer to not have to do over.

Thanks in advance for your help!
-- 
In Christ,

Timmy V.

http://burningones.com/
http://five.sentenc.es/ - Spend less time on e-mail
Nanako Shiraishi· Mar 11, 2009, 10:02 UTC · re: Tim Visher · lore

Re: Confusing `stash apply` behavior

Quoting Tim Visher <tim.visher@gmail.com>:
Show 33 quoted lines
> When I do `git stash apply`, it deletes the file I'm working with.
>
>     $ ls
>     featureList.txt*  keycontrol.mdb*
>
>     $ git show stash@{0}
>     commit b3c0f4b9b3c3ef7741a03fb27174f5838abc939d
>     Merge: 9fb9886 112bba9
>     Author: Tim Visher <timothy.visher@fms.treas.gov>
>     Date:   Tue Mar 10 15:25:04 2009 -0400
>
>     WIP on dev: 9fb9886 Added DB Lock file to .gitignore. EOM
>
>     diff --cc keycontrol.mdb
>     index 68a9bac,68a9bac..0000000
>     --- a/keycontrol.mdb
>     +++ b/keycontrol.mdb
>
>     $ git stash apply
>     Removing keycontrol.mdb
>     # On branch refactoring
>     # Changed but not updated:
>     #   (use "git add/rm <file>..." to update what will be committed)
>     #   (use "git checkout -- <file>..." to discard changes in working
> directory)
>     #
>     #       deleted:    keycontrol.mdb
>     #
>     no changes added to commit (use "git add" and/or "git commit -a")
>
> Considering the output of `git show` I would expect that the contents
> of the stash are, well, what I expect them to be: a new version of
> keycontrol.mdb.
The 'index' line in your 'diff --cc' output says that back when you created that stash, the HEAD and your index both held a blob object 68a9bac and your working tree didn't have that file, ie, removed. It is very natural that the file is removed when you apply that stash.
-- 
Nanako Shiraishi
http://ivory.ap.teacup.com/nanako3/
Tim Visher· Mar 11, 2009, 12:45 UTC · re: Nanako Shiraishi · lore

Re: Confusing `stash apply` behavior

On Wed, Mar 11, 2009 at 6:02 AM, Nanako Shiraishi <nanako3@lavabit.com> wrote:
Show 37 quoted lines
> Quoting Tim Visher <tim.visher@gmail.com>:
>
>> When I do `git stash apply`, it deletes the file I'm working with.
>>
>>     $ ls
>>     featureList.txt*  keycontrol.mdb*
>>
>>     $ git show stash@{0}
>>     commit b3c0f4b9b3c3ef7741a03fb27174f5838abc939d
>>     Merge: 9fb9886 112bba9
>>     Author: Tim Visher <timothy.visher@fms.treas.gov>
>>     Date:   Tue Mar 10 15:25:04 2009 -0400
>>
>>     WIP on dev: 9fb9886 Added DB Lock file to .gitignore. EOM
>>
>>     diff --cc keycontrol.mdb
>>     index 68a9bac,68a9bac..0000000
>>     --- a/keycontrol.mdb
>>     +++ b/keycontrol.mdb
>>
>>     $ git stash apply
>>     Removing keycontrol.mdb
>>     # On branch refactoring
>>     # Changed but not updated:
>>     #   (use "git add/rm <file>..." to update what will be committed)
>>     #   (use "git checkout -- <file>..." to discard changes in working
>> directory)
>>     #
>>     #       deleted:    keycontrol.mdb
>>     #
>>     no changes added to commit (use "git add" and/or "git commit -a")
>>
>> Considering the output of `git show` I would expect that the contents
>> of the stash are, well, what I expect them to be: a new version of
>> keycontrol.mdb.
>
> The 'index' line in your 'diff --cc' output says that back when you created that stash, the HEAD and your index both held a blob object 68a9bac and your working tree didn't have that file, ie, removed. It is very natural that the file is removed when you apply that stash.

Huh. I don't know how that would have happened, but I guess I should have been more careful with the stash command. Oh well.

Thanks for your help!
-- 
In Christ,

Timmy V.

http://burningones.com/
http://five.sentenc.es/ - Spend less time on e-mail

← back to recent threads