Stefan Beller <sbeller@xxxxxxxxxx> writes: >> $ git diff --submodule=log --submodule-log-detail=(long|short) >> >> I'm not sure what makes sense here. I welcome thoughts/discussion and >> will provide follow-up patches. > > The case of merges is usually configured with --[no-]merges, or > --min-parents=<n>. But that is a knob that controls an irrelevant aspect of the detail in the context of this discussion, isn't it? This code is about "to what degree the things that happened between two submodule commits in an adjacent pair of commits in the superproject are summarized?" and the current one unilaterally decides that something similar to what you would see in the output from "log --oneline --first-parent --left-right" is sufficient, which is a position to heavily favour projects whose histories are very clean by either being: (1) totally linear, each individual commit appearing on the first-parent chain; or (2) totally topic-branch based, everything appearing as merges of a topic branch to the trunk The hack Robert illustrates below is to change it to stop favouring such projects with "clean" histories, and show "log --oneline --no-merges --left-right". When presented that way, clean histories of topic-branch based projects will suffer by losing conciseness, but clean histories of totally linear projects will still be shown the same way, and messy history that sometimes merges, sometimes merges mergy histories, and sometimes directly builds on the trunk will be shown as an enumeration of individual commits in a flat way by ignoring merges and not restricting the traversal to the first parent chains, which would appear more uniform than what the current code shows. I do not see a point in introducing --min/max-parents as a knob to control how the history is summarized. This is a strongly related tangent, but I wonder if we can and/or want to share more code with the codepath that prepares the log message for a merge. It summarizes what happened on the side branch since it forked from the history it is joining back to (I think it is merge.c::shortlog() that computes this) and it is quite similar to what Robert wants to use for submodules here. On the other hand, in a project _without_ submodule, if you are pulling history made by your lieutenant whose history is full of linear merges of topic branches to the mainline, it may not be a bad idea to allow fmt-merge-msg to alternatively show something similar to the "diff --submodule=log" gives us, i.e. summarize the history of the side branch being merged by just listing the commits on the first-parent chain. So I sense some opportunity for cross pollination here.