Tom Rutherford <tmrutherford@xxxxxxxxx> writes: > What did you expect to happen? (Expected behavior) > > The rebase succeeds. > > I expect this because the documentation for the post-checkout hook > states, "This hook cannot affect the outcome of git switch or git > checkout" https://www.git-scm.com/docs/githooks#_post_checkout In general, pre-<anything> hook is run before <anything> subcommand is executed, and by exiting with non-zero status, the hook can tell the <anything> subcommand not to proceed. post-<anything> hook, on the other hand, runs _after_ <anything> has done its thing already, so by definition, it cannot say "Hey, <anything>, don't continue". That is the primary meaning of "cannot affect" in that description. Without looking at the contents of the actual hook is, nobody can say anything definite, but it also means that "Your hook is NOT ALLOWED TO do any extra modification to files and the index 'git switch' or 'git checkout' made". If "git rebase" or whatever command wanted to place files and the index into some state by using "git checkout" command, and if the post-checkout hook mucked with the state in such a way that contradicts with what the "git rebase" command wanted them to be in, it is not surprising the hook's behavior broke "git rebase"'s operation.