I want clean history, but that really means (a) clean and (b) history.
People can (and probably should) rebase their private trees (their own work). That’s a cleanup. But never other peoples code. That’s a “destroy history”
So the history part is fairly easy. There’s only one major rule, and one minor clarification:
- You must never EVER destroy other peoples history. You must not rebase commits other people did.
[…]
If you are working with git together with other people, it’s worth a read.
The only rule you need is: preserve history that is worth preserving.
99% of the time, that means you should squash commits in a PR. Most commits should be small enough that they don’t need more fine grained history than one commit.
I will grant a couple of exceptions:
Unfortunately, if you enable merge queues on GitHub it forces you to pick one method for all PRs, which is kind of dumb. We just use squash merges for everything and accept that sometimes it’s not the best.