> "commit A", "change parts of A because I misunderstood a requirement", "improve A based on code review" etc.

People are supposed to rebase all that noise away. Changes are supposed to be structured as sensible chunks that build up to the desired feature. It's like showing your work in a math exercise: you don't write out the final answer with no explanation, you demonstrate step by step how you reached it.