threads / discuss / 25455

Git Stash stages files if there is a conflict

Subject: Git Stash stages files if there is a conflict

## tl;dr

4 messages between Oct 15, 2010 and Oct 18, 2010.

replies: 3people: 3as markdown or json

Pretty Boy Floyd· Oct 15, 2010, 20:13 UTC · lore
Hello!

I am running msysgit 1.7.3.1. If I run stash apply, and there is a conflict, all of my stash changes get staged. Is this the correct behaviour? I found it a little surprising.

Another question: if I have stashed 10 files, and there is a conflict in one of them, will stash apply abort when it has a conflict, or will it apply all non-conflicted files.

Finally, if I do the following:

git stash git pull git stash apply

and another developer has removed a file that I have stashed, then I am unable to apply the stash on this file. How can I retrieve my changes from the stash?

Thanks!
Tor Arntsen· Oct 18, 2010, 09:33 UTC · re: Pretty Boy Floyd · lore

Re: Git Stash stages files if there is a conflict

On Fri, Oct 15, 2010 at 22:13, Pretty Boy Floyd <boxerab@gmail.com> wrote:
Show 5 quoted lines
> Hello!
>
> I am running msysgit 1.7.3.1.  If I run stash apply, and there is a conflict,
> all of my stash changes get staged. Is this the correct behaviour? I found it a
> little surprising.

I have no answer to the above, just noting that I observed exactly the same yesterday (git 1.7.1) and was a little surprised too. Not that it created any problems as such, just raised eyebrows.

[..]
-Tor
Eric Raible· Oct 18, 2010, 17:18 UTC · re: Pretty Boy Floyd · lore

Re: Git Stash stages files if there is a conflict

On 11:59 AM, Pretty Boy Floyd wrote:
Show 5 quoted lines
> Hello!
> 
> I am running msysgit 1.7.3.1.  If I run stash apply, and there is a conflict,
> all of my stash changes get staged. Is this the correct behaviour? I found it a
> little surprising.
My tests indicate that the same thing happens as with any conflicted merge.
Namely: non-conflicting changes get staged, and conflicting changes are left
only in the working directory (with conflict markers added as appropriate).

See http://progit.org/book/ch3-2.html#basic_merging, especially the part on conflicts.

> Another question: if I have stashed 10 files, and there is a conflict in one of
> them, will stash apply abort when it has a conflict, or will it apply all
> non-conflicted files.

Same as above. In both cases the stash is unaffected, which allows you to reset and try again.

Show 8 quoted lines
> Finally, if I do the following:
> 
> git stash
> git pull
> git stash apply
> 
> and another developer has removed a file that I have stashed, then I am unable
> to apply the stash  on this file. How can I retrieve my changes from the stash?

One nice (relatively new feature) is "git stash branch", which makes a new branch from an existing stash.

HTH - Eric
Aaron Boxer· Oct 18, 2010, 17:56 UTC · re: Eric Raible · lore

Re: Git Stash stages files if there is a conflict

Thanks, Eric. The new git stash branch command you mentioned will come in handy.

From a user's perspective, it doesn't make sense to stage unconflicted changes after stash apply. When I stash changes, these changes are usually not ready for committing.

I suppose git uses the index to differentiate between conflicted and unconflicted changes. So, its not a big deal. Just a bit surprising.

Thanks again for your help!
On Mon, Oct 18, 2010 at 1:18 PM, Eric Raible <raible@nextest.com> wrote:
Show 35 quoted lines
> On 11:59 AM, Pretty Boy Floyd wrote:
>> Hello!
>>
>> I am running msysgit 1.7.3.1.  If I run stash apply, and there is a conflict,
>> all of my stash changes get staged. Is this the correct behaviour? I found it a
>> little surprising.
>
> My tests indicate that the same thing happens as with any conflicted merge.
> Namely: non-conflicting changes get staged, and conflicting changes are left
> only in the working directory (with conflict markers added as appropriate).
>
> See http://progit.org/book/ch3-2.html#basic_merging,
> especially the part on conflicts.
>
>> Another question: if I have stashed 10 files, and there is a conflict in one of
>> them, will stash apply abort when it has a conflict, or will it apply all
>> non-conflicted files.
>
> Same as above.  In both cases the stash is unaffected, which allows
> you to reset and try again.
>
>> Finally, if I do the following:
>>
>> git stash
>> git pull
>> git stash apply
>>
>> and another developer has removed a file that I have stashed, then I am unable
>> to apply the stash  on this file. How can I retrieve my changes from the stash?
>
> One nice (relatively new feature) is "git stash branch", which makes a new
> branch from an existing stash.
>
> HTH - Eric
>

← back to recent threads