You can squash commits locally before pushing. I'm not a fan of "one commit per feature", but I still use interactive rebase on my personal branch to combine (or split) commits before merging it with an upstream branch.
To avoid cluttering the main repo but still have a backup, you can just use a fork (even just a directory on a remote server).
To avoid cluttering the main repo but still have a backup, you can just use a fork (even just a directory on a remote server).