Hi,
the exit value of a `git checkout' seems to depend on the exit values of
the hooks it runs. This breaks for example `git bisect', as seen in the
following example.
$ mkdir gitbug
$ cd gitbug
$ git init
$ ln -s /bin/false .git/hooks/post-commit
$ git bisect start
$ git bisect reset
fatal: invalid reference: master
Could not check out original HEAD 'master'.
Try 'git bisect reset <commit>'.
-ap