Assuming you're referring to something like the github "squash and merge" button, your history is far from "clean". You make it significantly less useful by destroying information and creating megadiffs incorporating many different changes.
Instead, do what you want with personal checkpoints, but refactor them into logical steps before publishing and merging (with a real merge) them.
Instead, do what you want with personal checkpoints, but refactor them into logical steps before publishing and merging (with a real merge) them.