Junio C Hamano <gitster@xxxxxxxxx> writes: > Sergey Organov <sorganov@xxxxxxxxx> writes: > >> Yep, but --diff-merges=m doesn't imply -p either, though it does produce >> diff output without -p, for merge commits only. > > I misspoke without thinking it through. It is absolutely wrong for > the "-m" option (or "--diff-merges=m" for that matter) to imply > "-p". > > $ git log --stat --summary > > would show "diff", but the kind of "diff" requested is not a textual > patch but just diffstat and the summary of new/removed files, and > the "diff" is shown only for single-parent commits, and it omits > "diff" for merge commits. Adding "-m" to this command line is *not* > a request to show the textual patch. It is to ask "diff" to be > shown pairwise with each of the parent. > > $ git log -m --stat --summary > > It is probably OK to special case "-m" given alone without any other > option [*1*] that specifies what kind of "diff" is requested and > make it imply "-p". But unconditionally flipping "-p" on only > because you saw "-m" (or "--diff-merges=m" for that matter) is just > wrong. Luckily, $ git log [--stat] --diff-merges=first-parent master..seen seems to do almost the right thing, with respect to the "It is probably OK to special case" I gave above. It only "enables diff" for merge commits, which does not quite feel right and we may want to do the same "enable diff" for single parent commits, but the good part is that it does not blindly imply "-p". It seems to do the "enable diff" the right way by honoring other command line options that specify the format of the diff, so with "--stat" included in the sample command line above, we get the diffstat for single parent commits (because we ask for "--stat" from the command line to show it throughout the history) and also for merge commits (because --diff-merges=first-parent does *not* blindly turn the textual patch '-p' on). > [Footnote] > > *1* They are not limited to "-p", "--stat" and "--summary", but > you'd need to also pay attention to "--raw", "--name-only", etc.) I've merged the so/log-diff-merge topic to 'master', with this (possibly) known breakage that it does not do anything for single parent commits. We may want to fix this last mile before the release that is scheduled to happen around early June. Note that I didn't check if you are doing the right thing for all formats, or if I was lucky and --stat was only one of them you paid attention to, when you needed to notice all others that you don't. But if you used the same logic that allows "git show" to by default give "-p/--cc" output while "git show --stat" to squelch the patch output, you should be OK. Thanks.