Utter Disregard for Git Commit History

Sometimes I wish version control had a bit better control over this. It might be interesting if Git had a new object that was below the Commit object — maybe a ExperimentalCommit that would get folded into a single Commit once it went through code review. That way, each developer could commit their scratchpad experimentations to mainline (so they can refer back to them in the future), but a separate commit history of code review could be generated and used as the “clean” history.

I wish there was a way to merge squash and also preserve the branch history while deleting the branch. I want a squashed commit that on the side references the head of the branch it was merged from. I know you can do things like --no-ff and then pass some special options to log to show only the merges, but I kind of wish the default log was big picture but still have a way to drill down into huge feature commits and see the actual development history (rewritten or not).