| Rejected |
|---|
![]() |
| Approved |
|---|
![]() |
| Rejected custom branch |
|---|
![]() |
| #!/bin/sh | |
| # This script checks if you're pushing to any of protected branches and asks you to confirm your intention | |
| # | |
| # It detects even if you're trying to push to the branch with different name. | |
| # Let's say that the current branch is 'feature' but you want to push to protected "release" branch. | |
| # Next command push will be detected and the script will ask you to confirm the push | |
| # $ git push -f origin HEAD:release | |
| # | |
| # To skip just add "--no-verify" argument: | |
| # $git push --no-verify origin develop | |
| # | |
| # Edit "protected_branches" variables if you need: | |
| # > protected_branches=('main' 'develop' 'release') | |
| # | |
| # Credits: | |
| # * https://helloacm.com/how-to-prevent-commiting-to-master-develop-branch-by-accidents-using-pre-push-hooks-in-git/ | |
| # * https://gist.github.com/ColCh/9d48693276aac50cac37a9fce23f9bda#gistcomment-3178586 | |
| protected_branches=('develop') | |
| if read local_ref local_sha remote_ref remote_sha; then | |
| for protected_branch in "${protected_branches[@]}" | |
| do | |
| if [[ "$remote_ref" == *"$protected_branch"* ]]; then | |
| echo "\033[1;33m⚠️ You're about to push to protected branch \"$protected_branch\", is that what you intended? [y|n] \033[0m" | |
| echo "\033[1m" | |
| read -n 1 -r < /dev/tty | |
| echo "\033[0m" | |
| # echo | |
| if echo $REPLY | grep -E '^[Yy]$' > /dev/null; then | |
| echo "👌 Exceptional push approved" | |
| exit 0 # push will execute | |
| fi | |
| echo "✋ Aborted" | |
| exit 1 # push will not execute | |
| fi | |
| done | |
| fi | |
| exit 0 |