How to undo a git push --force and undelete things

Today someone asked for my help to undo a git push --force that messed up his production server by overwriting the master branch with something that wasn’t meant to be there. My first advice would be to not deploy to production servers by manually running git pull or git push, but that’s another story. ;) So how would you solve the situation? It’s actually quite simple but if you don’t know some details about how git works, it can seem a bit daunting. »