In mercurial, I regularly use secret changesets to track my work on stuff that isn't quite ready to push yet. Then, if I need to make an emergency change to some file, I can update to the public revision, make that change and push it, without having to worry about my unfinished changesets getting pushed.
IE:
hg commit -sm "Partial work"
# Crap, prod is down
hg up -r <public version number>
hg commit -m "Fixin prod"
hg out
1 outgoing change, "Fixin prod"
hg push
hg rebase -r <secret revisions> -d.
# later
hg commit --amend -m "Finished work"
hg phase -dr.
hg out
1 outgoing change, "Finished work"
hg push
How would you do this in git?