Commit messages are navigation for future you
Six months from now, at 2 a.m., something will be broken. You will run git log -p -- offending-file and read the messages on every commit that touched it. Whether you find the cause in five minutes or two hours depends almost entirely on the messages your past self left. "fix stuff," "wip," "asdf," "save" — these are not commit messages, they are abandonment.
The conventional shape works because it is optimized for scanning history. Subject line: imperative mood ("Add", "Fix", "Remove" — as if you are giving Git a command), 50 characters or less, no trailing period. Blank line. Body: explain what and especially why, not how (the diff already shows how). Wrap at 72 characters so it reads in git log without scrolling. Footer: issue references ("Closes #142"), co-authors, breaking-change markers.
Two upgrades for team work. Conventional Commits add a type prefix (feat:, fix:, docs:, refactor:, test:, chore:) which lets release-tooling generate a changelog automatically. Semantic body with sections like Why, What changed, Risk, How to verify turns commits into reviewable evidence and replaces the bulk of "what is this?" Slack DMs.
The practical workflow: stage with git add -p, run git commit (no -m) to open your editor, write a real message in three minutes, save. -m is fine for trivial commits ("Fix typo in README") but actively harmful for substantive ones because it pushes you toward one-liners. Make writing a real message a habit before push. Future-you reads more commit messages than future-anyone-else.