I make WIP branches only for that purpose, so I can push half done work and rework it the day after.
This means a lot of history changes, but only in the WIP branch.
When history is clean, I rebase the feature branch.
Is this a good practice? I never found a better way to backup partial code.
The point is the ability to choose the algorithm and knowing exactly what it does.