I'm not sure if this is a good practice. As project grows, running tests takes more time - remember that tests are not only unit tests which should run quickly, there are acceptance tests which can take some time to run. Waiting for commit to finish can become painfully slow.
Additionally, I like to commit partial solutions to feature branch as I work. Later I will fix the mess with rebase - this workflow wouldn't work.
You need CI anyway, so I'd leave tests there, and let the developer decide when to run the unit tests on his machine.
This example runs unit tests only, so it doesn't take too long (integration and other tests would still have to be executed on CI).
It's more of a convenience than a practice, so you basically don't have to think about running unit tests.