GIT-HOOK(1) Git Manual GIT-HOOK(1) (NAME) git-hook - (SYNOPSIS) git hook run [--allow-unknown-hook-name] [--ignore-missing] [--to-stdin=] [(-j|--jobs) ] [-- ] git hook list [--allow-unknown-hook-name] [-z] [--show-scope] (DESCRIPTION) ( githooks(5) ) . : [hook "linter"] event = pre-commit command = ~/bin/linter --cpp20 [hook "linter"] -- ~/bin/linter --cpp20 -- . : [hook "linter"] event = pre-commit command = ~/bin/linter --cpp20 [hook "spellcheck"] event = commit-msg command = ~/bin/spellchecker git commit ~/bin/linter --cpp20 ( pre-commit) ~/bin/spellchecker ( commit-msg). hook..event ( git-config(1) ). hook.linter.event hook.linter.command -- << >> . (commit) (push) : [hook "linter"] event = pre-commit event = pre-push command = ~/bin/linter --cpp20 ~/bin/linter --cpp20 ( pre-commit) ( pre-push) . "pre-commit" : [hook "linter"] event = pre-commit command = ~/bin/linter --cpp20 [hook "no-leaks"] event = pre-commit command = ~/bin/leak-detector ( pre-commit) ~/bin/linter --cpp20 ~/bin/leak-detector . . hook..event githooks(5) . hook..event . << (WRAPPERS)>> . .git/hooks/ : git config set hook..command git config set --append hook..event . cp ~/my-script.sh ~/project/.git/hooks/pre-commit : git config set hook.my-script.command ~/my-script.sh git config set --append hook.my-script.event pre-commit (SUBCOMMANDS) run . hookdir . githooks(5) . -- ( --end-of-options gitcli(7) ) . ( ) githooks(5) . list [-z] [--show-scope] . . -z NUL . (OPTIONS) --allow-unknown-hook-name git hook run git hook list ( githooks(5) ). prereceive pre-receive . . --to-stdin "run" (stdin) . (EOF) . --ignore-missing . . -z "list" NUL . --show-scope "list" tab ( local global system) git config --show-scope . hookdir . -j, --jobs run . . hook.jobs git- config(1) . ( ) . hook..parallel . hook.jobs : applypatch-msg pre-commit prepare-commit-msg commit-msg post-commit post-checkout push-to-checkout. (WRAPPERS) git hook run (wrapper tools) . stdin . "mywrapper-start-tests" : [hook "setup-test-dashboard"] event = mywrapper-start-tests command = ~/mywrapper/setup-dashboard.py --tap mywrapper : git hook run --allow-unknown-hook-name mywrapper-start-tests \ # providing something to stdin --stdin some-tempfile-123 \ # execute multiple hooks in parallel --jobs 3 \ # plus some arguments of your own... -- \ --testname bar \ baz ( githooks(5) ) -- `mywrappertool-validate-commit` validate-commit. . (CONFIGURATION) hook..command hook. . . hook..event . . . hook..event hook. . "pre-commit" "update" . ( githooks(5) .) hook..command . . hook. . hook. . ( hook.pre-commit.event ). friendly-name hook..enabled hook..jobs . . hook..enabled hook. . true . false . (global) . hook..parallel hook. . false . true . true hook.jobs . () . hooks . hook..enabled . false hook..enabled . true . : ( pre-commit) . friendly-name ( hook..event ) .enabled . friendly-name .enabled . hook..jobs ( hook.post-receive.jobs = 4). hook.jobs . : hook..parallel true . CPU -1 . -1 . : hook..* ( ) . . hook.my-hook.jobs "my-hook" ( "post-receive") hook.my-hook.jobs my-hook . hook..jobs hook.post-receive.jobs . hook.jobs . ( ). -1 . hook..jobs . : applypatch-msg, prepare-commit-msg, commit-msg . pre-commit, post-checkout, push-to-checkout, post-commit . hook..parallel true . pre-push ( -j) . (SEE ALSO) githooks(5) (GIT) git(1) Git 2.55.0 2026-06-29 GIT-HOOK(1)