Checks if the remote branch is master
, then asks a confirmation. Based on https://gist.github.com/ColCh/9d48693276aac50cac37a9fce23f9bda, but modified to check the remote name instead of local, making it work also for the really dangerous accidents like below:
git push -f origin e09b7418a310114f6aaf495f969c3859095a99af:master
Further info: https://dev.ghost.org/prevent-master-push/, https://coderwall.com/p/jp7d5q/create-a-global-git-commit-hook, https://git-scm.com/docs/githooks#_pre_push, https://stackoverflow.com/questions/22585091/git-hooks-pre-push-script-does-not-receive-input-via-stdin
-
Enable git templates
git config --global init.templatedir '~/.git-templates'
-
Create a directory to hold the global hooks:
mkdir -p ~/.git-templates/hooks
-
Copy the
pre-push
file from below into~/.git-templates/hooks/pre-push
-
Make it executable
chmod +x ~/.git-templates/hooks/pre-push
-
In currently existing project, do a reinit. This will not overwrite existing commits, or existing hooks -- so if you already have a
pre-push
hook, you may need to merge the two together.git init
Done!
Thanks for this @mosra! How would I do if I want to protect multiple branches (e.g.
main
andmaster
)?