Setting the configuration variables:
receive.denyNonFastForwards
receive.denyDeletes
will prevent any 'forced' pushes from working across all branches.
If you want finer pre-branch control then you will have to use a 'hook' on the remote repository, probably the 'update' hook.
There is a sample update hook called 'update-paranoid' that probably does what you need (and more) in the git distribution in the 'contrib' folder.
gitweb link
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…