threads / discuss / 28786

Q: "git diff" using tag names

Subject: Q: "git diff" using tag names

## tl;dr

10 messages between Oct 28, 2011 and Nov 2, 2011.

replies: 9people: 5as markdown or json

Ulrich Windl· Oct 28, 2011, 12:28 UTC · lore
Hi,

when using a somewhat older git (of SLES11 SP1 SDK), I could not find a way to "git diff" between two tag names; I can only diff between two commit numbers. I can display a changeset using "git show", but that's not what I wanted. Is it possible to get the diff I want using older versions, and is such a feature implemented in the current version? If so, since when?

As I'm not subscribed to the list, I'd appreciate CC'ed replies. Thank you.

Greeting Ulrich

Alexey Shumkin· Oct 28, 2011, 12:59 UTC · re: Ulrich Windl · lore

Re: Q: "git diff" using tag names

Tag is a pointer to a commit (if to say simply)

e.g. in my repo $ git show-ref --tags --abbrev=7 -->8-- 676f194 refs/tags/v2.6.7 b23c481 refs/tags/v2.6.8 -->8--

so

$ git diff v2.6.7..v2.6.8 is equivalent to $ git diff 676f194..b23c481

etc
Show 16 quoted lines
> Hi,
> 
> when using a somewhat older git (of SLES11 SP1 SDK), I could not find
> a way to "git diff" between two tag names; I can only diff between
> two commit numbers. I can display a changeset using "git show", but
> that's not what I wanted. Is it possible to get the diff I want using
> older versions, and is such a feature implemented in the current
> version? If so, since when?
> 
> As I'm not subscribed to the list, I'd appreciate CC'ed replies.
> Thank you.
> 
> Greeting
> Ulrich
> 
> 
Ulrich Windl· Nov 2, 2011, 07:31 UTC · re: Alexey Shumkin · lore

Antw: Re: Q: "git diff" using tag names

Hello Alexey,
thank you very much for your reply. I felt I did something wrong, but couldn't find out what it was. Actually it turned out that I had just mistyped one tag name.

Also it seems that both syntaxes work: git diff v0.4..v0.5 git diff v0.4 v0.5

The question is: How does git disambiguate between tag names, commits and file names? (All may start with a letter) This seems to work automagically, and I was desparately looking for an option like "--" to separate revisions from file names. I found "SPECIFYING REVISIONS" in git-rev-parse(1), so you don't really have to answer.

Regards, Ulrich

>>> Alexey Shumkin <Alex.Crezoff@gmail.com> schrieb am 28.10.2011 um 14:59 in
Nachricht <20111028165943.2cc8253d@ashu.dyn.rarus.ru>:
Show 34 quoted lines
> Tag is a pointer to a commit (if to say simply)
> 
> e.g. in my repo
> $ git show-ref --tags --abbrev=7
> -->8--
> 676f194 refs/tags/v2.6.7
> b23c481 refs/tags/v2.6.8
> -->8--
> 
> so
> 
> $ git diff v2.6.7..v2.6.8
> is equivalent to
> $ git diff 676f194..b23c481
> 
> etc
> > Hi,
> > 
> > when using a somewhat older git (of SLES11 SP1 SDK), I could not find
> > a way to "git diff" between two tag names; I can only diff between
> > two commit numbers. I can display a changeset using "git show", but
> > that's not what I wanted. Is it possible to get the diff I want using
> > older versions, and is such a feature implemented in the current
> > version? If so, since when?
> > 
> > As I'm not subscribed to the list, I'd appreciate CC'ed replies.
> > Thank you.
> > 
> > Greeting
> > Ulrich
> > 
> > 
> 
> 
Alexey Shumkin· Nov 2, 2011, 09:29 UTC · re: Ulrich Windl · lore

Re: Q: "git diff" using tag names

Show 15 quoted lines
> Hello Alexey,
> 
> thank you very much for your reply. I felt I did something wrong, but
> couldn't find out what it was. Actually it turned out that I had just
> mistyped one tag name.
> 
> Also it seems that both syntaxes work:
> git diff v0.4..v0.5
> git diff v0.4 v0.5
> 
> The question is: How does git disambiguate between tag names, commits
> and file names? (All may start with a letter) This seems to work
> automagically, and I was desparately looking for an option like "--"
> to separate revisions from file names. I found "SPECIFYING REVISIONS"
> in git-rev-parse(1), so you don't really have to answer.

Yes, you found right answer. "--" option separates file names from "commits' names". but it usually necessary when you have branches or tags named as some of your files. E.g. you have file "test" and you name branch "test" so "git log test" will complain that it cannot understand your intention to see log of what and will fail

$ git log test fatal: ambiguous argument 'test': both revision and filename Use '--' to separate filenames from revisions

$ git log -- test will show log of file test

$ git log test -- will show log of branch test

> Also it seems that both syntaxes work:
> git diff v0.4..v0.5
> git diff v0.4 v0.5

honestly, I do not know the difference (at the moment :)) may be gurus or manual will help to discover it

Show 45 quoted lines
> 
> Regards,
> Ulrich
> 
> >>> Alexey Shumkin <Alex.Crezoff@gmail.com> schrieb am 28.10.2011 um
> >>> 14:59 in
> Nachricht <20111028165943.2cc8253d@ashu.dyn.rarus.ru>:
> > Tag is a pointer to a commit (if to say simply)
> > 
> > e.g. in my repo
> > $ git show-ref --tags --abbrev=7
> > -->8--
> > 676f194 refs/tags/v2.6.7
> > b23c481 refs/tags/v2.6.8
> > -->8--
> > 
> > so
> > 
> > $ git diff v2.6.7..v2.6.8
> > is equivalent to
> > $ git diff 676f194..b23c481
> > 
> > etc
> > > Hi,
> > > 
> > > when using a somewhat older git (of SLES11 SP1 SDK), I could not
> > > find a way to "git diff" between two tag names; I can only diff
> > > between two commit numbers. I can display a changeset using "git
> > > show", but that's not what I wanted. Is it possible to get the
> > > diff I want using older versions, and is such a feature
> > > implemented in the current version? If so, since when?
> > > 
> > > As I'm not subscribed to the list, I'd appreciate CC'ed replies.
> > > Thank you.
> > > 
> > > Greeting
> > > Ulrich
> > > 
> > > 
> > 
> > 
> 
>  
>  
> 
Frans Klaver· Nov 2, 2011, 09:34 UTC · re: Alexey Shumkin · lore

Re: Q: "git diff" using tag names

On Wed, Nov 2, 2011 at 10:29 AM, Alexey Shumkin <alex.crezoff@gmail.com> wrote:
Show 5 quoted lines
>> Also it seems that both syntaxes work:
>> git diff v0.4..v0.5
>> git diff v0.4 v0.5
> honestly, I do not know the difference (at the moment :))
> may be gurus or manual will help to discover it

As per the git-diff documentation, these two versions behave equally -- i.e. no differences.

Comparing branches $ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3> ‪1.‬ Changes between the tips of the topic and the master branches. ‪2.‬ Same as above. ‪3.‬ Changes that occurred on the master branch since when the topic branch was started off it.

Cheers, Frans

Alexey Shumkin· Nov 2, 2011, 20:08 UTC · re: Frans Klaver · lore

Re: Q: "git diff" using tag names

thanks )
Show 23 quoted lines
> On Wed, Nov 2, 2011 at 10:29 AM, Alexey Shumkin
> <alex.crezoff@gmail.com> wrote:
> 
> >> Also it seems that both syntaxes work:
> >> git diff v0.4..v0.5
> >> git diff v0.4 v0.5
> > honestly, I do not know the difference (at the moment :))
> > may be gurus or manual will help to discover it
> 
> As per the git-diff documentation, these two versions behave equally
> -- i.e. no differences.
> 
> Comparing branches
> $ git diff topic master    <1>
> $ git diff topic..master   <2>
> $ git diff topic...master  <3>
> ‪1.‬ Changes between the tips of the topic and the master branches.
> ‪2.‬ Same as above.
> ‪3.‬ Changes that occurred on the master branch since when the topic
> branch was started off it.
> 
> Cheers,
> Frans
Junio C Hamano· Nov 2, 2011, 09:35 UTC · re: Alexey Shumkin · lore

Re: Q: "git diff" using tag names

Alexey Shumkin <alex.crezoff@gmail.com> writes:
Show 5 quoted lines
>> Also it seems that both syntaxes work:
>> git diff v0.4..v0.5
>> git diff v0.4 v0.5
> honestly, I do not know the difference (at the moment :))
> may be gurus or manual will help to discover it

The latter is the kosher version, as diff is about two "endpoints" and not about "ranges". The only reason the former is parsed without erroring out is because too many people are used to type .. between two things without thinking, learned the notation from "git log", which _is_ about ranges.

Alexey Shumkin· Nov 2, 2011, 20:08 UTC · re: Junio C Hamano · lore

Re: Q: "git diff" using tag names

Oh, I see
Show 13 quoted lines
> Alexey Shumkin <alex.crezoff@gmail.com> writes:
> 
> >> Also it seems that both syntaxes work:
> >> git diff v0.4..v0.5
> >> git diff v0.4 v0.5
> > honestly, I do not know the difference (at the moment :))
> > may be gurus or manual will help to discover it
> 
> The latter is the kosher version, as diff is about two "endpoints"
> and not about "ranges". The only reason the former is parsed without
> erroring out is because too many people are used to type .. between
> two things without thinking, learned the notation from "git log",
> which _is_ about ranges.
Jakub Narebski· Oct 28, 2011, 13:21 UTC · re: Ulrich Windl · lore

Re: Q: "git diff" using tag names

"Ulrich Windl" <Ulrich.Windl@rz.uni-regensburg.de> writes:
> When using a somewhat older git (of SLES11 SP1 SDK),
Nb. you can check version of git with "git --version".
Show 8 quoted lines
>                                                      I could not
> find a way to "git diff" between two tag names; I can only diff
> between two commit numbers. I can display a changeset using "git
> show", but that's not what I wanted.
>
> Is it possible to get the diff I want using older versions, and is
> such a feature implemented in the current version? If so, since
> when?

From the very beginning in Git you can use tag name where you need commit identifier; Git would use commit that tag points to (will dereference or peel a tag).

That is not possible in some [censored] version control systems; I am looking at you, Subversion!

So if you can do
  $ git show v0.9
  $ git show v1.0
you can also do
  $ git diff v0.9 v1.0
and
  $ git log v0.9..v1.0
-- 
Jakub Narębski
Ulrich Windl· Nov 2, 2011, 07:35 UTC · re: Jakub Narebski · lore

Antw: Re: Q: "git diff" using tag names

>>> Jakub Narebski <jnareb@gmail.com> schrieb am 28.10.2011 um 15:21 in Nachricht
<m3aa8l5k1y.fsf@localhost.localdomain>:
Show 5 quoted lines
> "Ulrich Windl" <Ulrich.Windl@rz.uni-regensburg.de> writes:
> 
> > When using a somewhat older git (of SLES11 SP1 SDK),
> 
> Nb. you can check version of git with "git --version".
Hi!
For the records, it's "1.6.0.2"...
Show 13 quoted lines
> 
> >                                                      I could not
> > find a way to "git diff" between two tag names; I can only diff
> > between two commit numbers. I can display a changeset using "git
> > show", but that's not what I wanted.
> >
> > Is it possible to get the diff I want using older versions, and is
> > such a feature implemented in the current version? If so, since
> > when?
> 
> From the very beginning in Git you can use tag name where you need
> commit identifier; Git would use commit that tag points to (will
> dereference or peel a tag).
As said before, I was confused by the simplicity: I was looking for an option to specify revisions (as opposed to file names), like "-r" for RCS, but found none. To make things complicated, I had mistyped one tag name without noticing, so I failed to diff, making me think that tag names won't work the way they actually do.
Sorry, and thanks to everybody who helped!
Ulrich
Show 17 quoted lines
> 
> That is not possible in some [censored] version control systems; I am
> looking at you, Subversion!
> 
> 
> So if you can do
> 
>   $ git show v0.9
>   $ git show v1.0
> 
> you can also do
> 
>   $ git diff v0.9 v1.0
> 
> and
> 
>   $ git log v0.9..v1.0

← back to recent threads