En realidad si puedes hacer un deploy cada vez que haces commit. Sería cuestión de mirar los
hooks post commit para lanzar tu script de deploy.
Pero, esa no sería la forma más recomendable de trabajar, tomando en cuenta que un commit son cambios específicos, y que además una buena práctica es hacer commits frecuentemente. Una mejor manera como ya te dijeron es hacer un push de varios commits, o incluso usar tags para saber siempre lo que ha estado en el servidor.
En cuanto a pruebas ya te pasaron los links de la documentación de django. Y también puedes puedes hacer las pruebas en cada push, en este caso yo utilizaría herramientas de integración continua como Jenkins o con
Travis (si tu proyecto tiene un repositorio en github público), que corre las pruebas e indica si el push es bueno.
Para hacer tu deploy, te recomendaría
Fabric, para automatizar las tareas.
Saludos