@freemo imagine having a tree of messy private commits. You can: merge them; split them; reorder them; branch them; move commits into different parts of the tree; improve their name or description; undo/redo some of these private operations; and so on.
You work in complete freedom because it is a private tree of commits. The structure of the tree is a first class citizien of the tool, and it is an ever changing structure.
When a commit is in good shape and ready to be published, it become a public commit, and you cannot anymore change it.
The public commits are a linear order of high-quality commits. The last public commit become the new root of the messy tree of your private commits.