Breaking this rule is one of my bad habits and it's annoying for my colleagues to review and increases the risk of including some unintentional change ("I'll just edit this config file for some local testing...") as it gets lost in the noise.
I make the commit messages also for myself, how many time you find some code and wonder why is it like that, then you search git and find if lucky a nice message with a ticket id and if you are lucky again the ticket has clear details on what was the issue that was fixed and what behavior was requested.
Of course you still need an overarching description in the merge request - should be really easy to write, when you have all the steps taken right in front of you.
For a more concrete example, say you're adding a new screen to a mobile app, I'll probably split into chunks like these:
- add new `/foo` endpoints to API
- add `NewScreen` (can be reviewed as a feature, does the screen contain / do what it's suppose to)
- add `NewScreen` to navigation stack
- link to `NewScreen` from settings page
- add tracking for `NewScreen`
Each of these have very different purposes, and I find being able to focus on the different aspects (business logic, infrastructure stuff, analytics) helps a lot. They can also be reverted cleanly if needed without destroying all of the work.You can still review the entire PR at once, with the option to drill down into individual commits if desired.