Skip to content

Instantly share code, notes, and snippets.

Forked from ColCh/
Last active October 10, 2023 19:58
  • Star 4 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
Git pre-push hook to confirm pushing to master

Git pre-push hook

Checks if the remote branch is master, then asks a confirmation. Based on, 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:,,,


  1. Enable git templates

    git config --global init.templatedir '~/.git-templates'
  2. Create a directory to hold the global hooks:

    mkdir -p ~/.git-templates/hooks
  3. Copy the pre-push file from below into ~/.git-templates/hooks/pre-push

  4. Make it executable

    chmod +x ~/.git-templates/hooks/pre-push
  5. 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


# Argument parsing taken from .git/hooks/pre-push.sample
if read local_ref local_sha remote_ref remote_sha; then
if [[ "$remote_ref" == *"$protected_branch"* ]]; then
echo -en "\033[1;33mYou're about to push to master, is that what you intended? [y|n] \033[0m"
echo -en "\033[1m"
read -n 1 -r < /dev/tty
echo -en "\033[0m"
if echo $REPLY | grep -E '^[Yy]$' > /dev/null; then
exit 0 # push will execute
exit 1 # push will not execute
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment