threads / discuss / 43923

diff <commit> using 3-dot behavior

Subject: diff <commit> using 3-dot behavior

## tl;dr

6 messages between Aug 24, 2016 and Aug 24, 2016.

replies: 5people: 5as markdown or json

Robert Dailey· Aug 24, 2016, 14:28 UTC · lore

I want to view the complete diff of my branch (topic) relative to its parent branch (master). This should include cached/staged files and unstaged working tree changes.

If I do this:
$ git diff master

This will include changes on master *since* my last merge, which I do not want (I don't want to see changes on master, only on topic). I tried this:

$ git diff master --not master
This didn't give me any output. If I do this:
$ git diff master...topic

This shows me only committed changes on topic, but excludes staged & unstaged changes.

How can I get the results I want?
Michael J Gruber· Aug 24, 2016, 16:00 UTC · re: Robert Dailey · lore

Re: diff <commit> using 3-dot behavior

Robert Dailey venit, vidit, dixit 24.08.2016 16:28:
Show 22 quoted lines
> I want to view the complete diff of my branch (topic) relative to its
> parent branch (master). This should include cached/staged files and
> unstaged working tree changes.
> 
> If I do this:
> 
> $ git diff master
> 
> This will include changes on master *since* my last merge, which I do
> not want (I don't want to see changes on master, only on topic). I
> tried this:
> 
> $ git diff master --not master
> 
> This didn't give me any output. If I do this:
> 
> $ git diff master...topic
> 
> This shows me only committed changes on topic, but excludes staged &
> unstaged changes.
> 
> How can I get the results I want?
The 3-dot notation means:
Show the difference between the merge-base of master and topic, and topic.
I'm not completely sure, but I guess what you want is:

Show the difference between the merge-base of master and topic, and the worktree.

You can accomplish this with:
git diff $(git merge-base master topic)

I guess a shorter notation for that could come in handy. OTOH, I usually diff against HEAD in a situation like that.

Cheers, Michael

Robert Dailey· Aug 24, 2016, 16:10 UTC · re: Michael J Gruber · lore

Re: diff <commit> using 3-dot behavior

On Wed, Aug 24, 2016 at 11:00 AM, Michael J Gruber <git@drmicha.warpmail.net> wrote:

Show 15 quoted lines
> The 3-dot notation means:
>
> Show the difference between the merge-base of master and topic, and topic.
>
> I'm not completely sure, but I guess what you want is:
>
> Show the difference between the merge-base of master and topic, and the
> worktree.
>
> You can accomplish this with:
>
> git diff $(git merge-base master topic)
>
> I guess a shorter notation for that could come in handy. OTOH, I usually
> diff against HEAD in a situation like that.

Great solution. I feel silly now, the answer ended up being rather obvious. I can create an alias for that. But I can't diff against HEAD because then I am not seeing a diff of changes already committed. Thanks for your help.

Junio C Hamano· Aug 24, 2016, 16:22 UTC · re: Robert Dailey · lore

Re: diff <commit> using 3-dot behavior

Robert Dailey <rcdailey.lists@gmail.com> writes:
> $ git diff master...topic
... which is defined roughly as
	git diff $(git merge-base master topic) topic

The merge-base is to compute the point you forked your topic from the mainline. So if you want to compare your current state in the index with the fork point, you'd do

	git diff --cached $(git merge-base master topic)
and comparing your working tree state would be
	git diff --cached $(git merge-base master topic)
Jacob Keller· Aug 24, 2016, 20:48 UTC · re: Junio C Hamano · lore

Re: diff <commit> using 3-dot behavior

On Wed, Aug 24, 2016 at 9:22 AM, Junio C Hamano <gitster@pobox.com> wrote:
Show 10 quoted lines
> The merge-base is to compute the point you forked your topic from
> the mainline.  So if you want to compare your current state in the
> index with the fork point, you'd do
>
>         git diff --cached $(git merge-base master topic)
>
> and comparing your working tree state would be
>
>         git diff --cached $(git merge-base master topic)
>
Those are both identical?

Thanks, Jake

Jeff King· Aug 24, 2016, 21:39 UTC · re: Jacob Keller · lore

Re: diff <commit> using 3-dot behavior

On Wed, Aug 24, 2016 at 01:48:30PM -0700, Jacob Keller wrote:
Show 13 quoted lines
> On Wed, Aug 24, 2016 at 9:22 AM, Junio C Hamano <gitster@pobox.com> wrote:
> > The merge-base is to compute the point you forked your topic from
> > the mainline.  So if you want to compare your current state in the
> > index with the fork point, you'd do
> >
> >         git diff --cached $(git merge-base master topic)
> >
> > and comparing your working tree state would be
> >
> >         git diff --cached $(git merge-base master topic)
> >
> 
> Those are both identical?
I imagine the second one just meant to drop "--cached".
-Peff

← back to recent threads