threads / bug / 33240

Bug? git show behaves incorrectly when called on a stash object

Subject: Bug? git show behaves incorrectly when called on a stash object

## tl;dr

3 messages between Mar 20, 2013 and Mar 21, 2013.

replies: 2people: 2as markdown or json

Kirill Likhodedov· Mar 20, 2013, 15:08 UTC · lore
Hi,
I experience difference in behavior between `git stash show stash@{0}` and `git show stash@{0}`:
-----------------------------------------------------
# git stash show --name-status stash@{0}
A       a
M       conflict.js
# git show --name-status stash@{0}
commit 05aa170746dc4e060f10710a92aed4592276f2d4
Merge: 737f544 7c2160f
Author: Kirill Likhodedov <Kirill.Likhodedov@gmail.com>
Date:   Wed Mar 20 18:56:28 2013 +0400
   WIP on master: 737f544 master
MM      conflict.js
-----------------------------------------------------

The first gives the correct result, while the second doesn't show the addition. Is it a bug, or I'm just missing something?

Thanks a lot! Kirill.

Matthieu Moy· Mar 20, 2013, 15:56 UTC · re: Kirill Likhodedov · lore

Re: Bug? git show behaves incorrectly when called on a stash object

Kirill Likhodedov <kirill.likhodedov@gmail.com> writes:
> The first gives the correct result, while the second doesn't show the addition.
> Is it a bug, or I'm just missing something?

stash objects are commits with 2 parents (ie. merge commits). One commit is the HEAD you stashed from, and the other is the saved state of the index. I'm not sure from the doc what the semantics of --name-status is for merge commits, but it seems it shows only files modified in both parents.

Use git show --first-parent --name-status, it should do what you expect (or -m instead of --first-parent).

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/
Kirill Likhodedov· Mar 21, 2013, 08:10 UTC · re: Matthieu Moy · lore

Re: Bug? git show behaves incorrectly when called on a stash object

On 20.03.2013, at 19:56, Matthieu Moy wrote:
> stash objects are commits with 2 parents (ie. merge commits). One commit
> is the HEAD you stashed from, and the other is the saved state of the
> index.
...
> Use git show --first-parent --name-status, it should do what you expect

Thanks a lot for clarifying that. It is actually mentioned in git help stash, but I've missed this. With "--first-parent" I get the expected result. Thanks for your help.

> I'm not sure from the doc what the semantics of --name-status is
> for merge commits, but it seems it shows only files modified in both
> parents.

I think I've found the reason of this behavior. git help show mentiones that:

> It also presents the merge commit in a special
> format as produced by git diff-tree --cc.
And git help diff-tree says that --cc implies -c, while -c "lists only files which were modified from all parents".
-- Kirill.

← back to recent threads