When you want to skip the git pre-commit hook for a single commit, it's easy — you just add the --no-verify flag (or -n for short) to the git commit command:
git commit --no-verify
But to skip multiple commits executed by another git command, like rebase or merge, the --no-verify flag doesn't work. The best way I've found to skip the pre-commit hook in that case is to code the hook to check for a custom environment variable (I like to use NO_VERIFY), and skip the pre-commit logic if it's not empty. For example, the pre-commit.sh script in my Google Java Format Pre-Commit Hook has a block of code like this at the top of the file, which skips the main functionality of the pre-commit hook if the NO_VERIFY environment variable has been set to anything other than an empty string:
if [ "$NO_VERIFY" ]; then echo 'pre-commit hook skipped' 1>&2 exit 0 fi
So when I want to skip that pre-commit hook when doing a complicated rebase or merge, I simply run the following commands in the same shell:
export NO_VERIFY=1 git rebase -i master # or `git merge some-branch` or whatever export NO_VERIFY=