| Hook | Command | When | Exit 1 | Parameters |
|---|---|---|---|---|
| applypatch-msg | git am | before patch applied | stops patch application | message file name |
| pre-applypatch | git am | after applied, before commit | stops commit | n/a |
| post-applypatch | git am | after commit | n/a | n/a |
| pre-commit | git commit | before message | stops commit | n/a |
| prepare-commit-msg | git commit | after default message generated, before invoking editor | stops commit | message file name, message source type, commit hash |
| commit-msg | git commit | inspect, edit, and format the message | stops commit | message file name |
| post-commit | git commit | after commit finished | n/a | n/a |
| pre-rebase | git rebase | before rebase | stops rebase | n/a |
| post-checkout | git checkout git clone |
after worktree is changed | n/a | previous HEAD ref, new HEAD ref, is branch |
| post-merge | git merge git pull |
after successful merge completed | n/a | is squash |
| pre-receive | git push | before the first ref is updated | stops update | n/a (but STDIN gets refs) |
| update | git push | before each ref is updated | stops present ref from being updated | ref name, old object name, new object name |
| post-receive | git push | after the last ref is updated | n/a | n/a (but STDIN gets refs) |
| post-update | git push | after the last ref is updated | n/a | ref names that were updated |
| pre-auto-gc | git gc --auto | before garbage collection begins | stops garbage collection | n/a |
You may want to read Mark Longair's great post about the environment each git hook runs in.