Earlier quoted context omitted.
Quite a few people are suggesting that, when it's time to share your code with others, maybe you should squash/rebase it to clean things up. That's totally up to you... but just know that not everyone thinks rebasing is a good idea. See [1], for example. [1] https://fossil-scm.org/home/doc/trunk/www/rebaseharm.md I think we often feel the urge to rebase and squash not because it actually makes our code changes easier…
> Who do we really help by pretending that we're more organized, coherent, and linear than we actually were? We're helping the future reader who's reading the history because they want to understand why a change was made - and "because the author of the branch initially had the wrong idea" is almost never the answer they're looking for. I sometimes enjoy reading stream-of-consciousness writing, but most of the time (…
"Change" is a subject to interpretation. Most of the time it's the scope that the change belongs to is what has the meaningful value.
Say, changes made in connection to fixing an issue are logically tied for inclusion as well as for potential unwinding.
Some tangent changes technically should not be casually folded in, just in case this changeset will need to be propagated or rolled back.
Thus this elaborate muli-staged commit management in Git.
Many projects don't have such need to manange the change flow, so Version control is used as a kind of undo buffer. Which is fine, in such cases the meaning is tied to release states.
If anything, it makes more practical sense to preserve only commits with a buildable state, not just some transitional changes.