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. 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 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". So both "a..b" and "a...b" have meaning for both diff and log, but which you want to use depends on what you are looking for. They do have some relationship, of course. If you want to have a simple way to know which is which, then - "a..b" is a plain difference. Think of it as a subtraction. For "diff", it is simply the diff between a and b, and for log it is the "set difference" (shown as either just "-" or as "\" in set theory math) between the commits that are in b and not in a. - "a...b" is a more complex difference. For log, it's no longer the regular set difference, but a "symmetric difference" (usually shown as a greek capital "Delta" in set theory math). And for "diff", it's no longer just the diff between two states, it's the diff from a third state (the nearest common state) to the second state. In short: It's easy to think that "log" and "diff" are related, but they really are very fundamnetally different. Linus -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html