Re: my git problem
On Mon, 28 Apr 2008 12:21:17 -0700 (PDT) Linus Torvalds <torvalds@linux-foundation.org> wrote:
Show 36 quoted lines
>
>
> On Mon, 28 Apr 2008, Andrew Morton wrote:
> >
> > hm, weirdness.
> >
> > y:/usr/src/git26> git-diff origin...git-ia64
> > y:/usr/src/git26> git-log origin...git-ia64 | wc -l
> > 15574
> >
> > I'd have expected git-log to operate on the same patches as git-diff.
>
> No, not at all.
>
> - "git log" shows each commit in a range.
>
> - "git diff" shows just the difference between two states.
>
> The two have nothing in common. One operates on lots of individual commits
> (git log) individually, while the other one fundamentally operates on just
> two end-points (git diff).
>
> And "a..b" and "a...b" means two totally different things for the two
> totally different operations.
>
> When doing "a..b" and looking at individual commits, it means "show all
> commits that are in b but *not* in a". And when doing "a..b" when asking
> for a "diff", it means "show the difference from 'a' to 'b'".
>
> They are *very* different operations indeed. The log can be empty, even if
> the diff is not empty (example: b is _before_ a, so there is nothing in
> 'b' that isn't in 'a', but that doesn't mean that 'b' is *equal* to 'a',
> so there is still a diff!). And the log can be non-empty, even if the diff
> is empty (example: 'b' and 'a' have the same actual tree, but two
> different ways of gettign there: the diff is empty, but the log of commits
> in between them is not).
> So anybody who thinks that 'diff' and 'log' have *anything* to do with
> each other is fundamentally confused.
Show 15 quoted lines
> Not just about git, btw. It's true
> in any model - it's fundamental.
>
> As to 'a...b', it also means somethign different for diff (two endpoints!)
> and log (set of commits). For diff, it means "show the difference between
> the common commit and 'b'", while for log it means "show all commits that
> are in either 'a' or 'b' but *not* in both".
>
> So you should do
>
> # generate the diff from the common point
> git diff -p --stat a...b
>
> # show the commits that are in b but not in a
> git log a..b
That seems to work nicely, thanks.
Show 5 quoted lines
> where the difference between two dots and three dots is important, and
> stems directly from the fact that 'diff' and 'log' are two totally
> different operations that cannot _possibly_ have semantics that mean the
> same thing - because a "set of commits" is fundamentally different from
> "difference betwen two endpoints".