But the actual commit message should consist of History/Motivation/Context - so that someone who's going through the blame can understand why a certain change was made, and what the context was.
Linus had a good template for this, which makes a lot of sense: https://gist.github.com/finalfantasia/bd0070673ca27e5f7473
If I want my history, motivation and context to be ephemeral I put it in a commit message.
It still perplexes me why people obsess over commit messages while the places where people are actually looking when they have these questions are neglected.
If thats what you got from my comment then you misinterpreted it.
Nobody wants docs to look like commit messages. They want them to be relevant to the context.
The commit message is one place - and gives the author an opportunity to speak directly with a future developer over the place-in-time-context that this change was made.
If devs are constantly asking "what the fuck?" all over the code base then that's usually coz tests, code comments, docs and code quality were all badly neglected.
Better commit messages are a band aid over that gaping wound.
As a lame example - Incident Response/SRE will also be trying to get their heads around changes being made - especially if they're responding to an outage, and trying to figure out what change broke production - and why it was made.
Not everyone will know every bit of the project as intimately as the Dev team - and having a good commit message will help any unfamiliar response team mitigate, or escalate accordingly.
If you put some effort into your runbooks, not your commit messages, thats where they'll really appreciate good, detailed writing.
I agree about the technical justifications belonging in the source code itself as comments.
That's nice until you switch git hosts or project management systems and the context is lost. Commits live forever, use them.
At least a small summary of "why" would've been so helpful many times in the legacy codebase I maintain instead of "fix tests", "format", "FOO-123"
In my mind, commit messages should be a quick summary of what. The basic motivation should be clearly labeled as a feature, bugfix, etc., but that's all. Commit messages are for quick browsing and a summary of what changed, not extensive justification.
The why is too important to be put in a commit message. The product why belongs in a linked issue that describes the bug or use case in full detail. Meanwhile, the technical why's (why this particular solution as opposed to alternatives) belong in the code itself as comments.