If a respository fails half way through a push, gits should log into the upstream server, and log into anyone's system who has pulled from the upstream since the commits were pushed for each working push, and edit the history to pretend that the push did not happen. Of course it would have to do this to the local repository as well.