Now you're talking about branching strategies, not commits, which is a different and much larger topic :)
I keep it simple - branches are short-lived. I don't even like feature branches, I break features into a series of changes and push each change to `main`, incrementally delivering all the changes needed to make the feature useful while keeping `main` healthy.
More details at: https://trunkbaseddevelopment.com/