Result of lots of searching on net is that pre-checkout hook in git is not implemented yet. The reason can be:
pre-checkout
You could write a script that does your backup then checkout. Then create a shell alias so it runs that script instead when you type git checkout.
git checkout