38

I have a range of commits that fail the tests that are committed with them. I need to interactive-rebase across these commits; but the hooks are failing, and causing each commit to screw up, forcing me to manually git commit -n each step.

Is there a way to automate this? git rebase --interactive --no-verify doesn't do what I'd expect.

ELLIOTTCABLE
  • 2,708

4 Answers4

14

Here's another very quick and non-invasive workaround which doesn't require modifying your existing hooks:

git config core.hooksPath .no-hooks

Once you're done, don't forget to restore the hooks. If you're using the global default hooks path of $GIT_DIR/hooks then you can just revert this override:

git config --unset core.hooksPath

or if you're using something like husky then you'll need:

git config core.hooksPath .husky
6

I stumbled upon the same problem, but the only answer I found required modifying the hook itself.

Here the author suggests filtering this situation using the branch name:

#!/bin/bash
BRANCH_NAME=$(git branch | grep '*' | sed 's/* //') 

if [[ $BRANCH_NAME != *"no branch"* ]]
then
  # your regularly scheduled hook
fi

I changed the condition a little bit, as my git output looks like (no branch, rebasing some-branch-name). It does not solve my specific case, but maybe someone will find this question and use this approach in future.

Piotr Zierhoffer
  • 213
  • 2
  • 11
5

Variation on the answer given by @s6mike:

Observed that there are already some GIT env vars in the hook context so for my case when wanting to avoid hooks explicitly for rewording a commit without having to set a new env var

if [[ "${GIT_REFLOG_ACTION}" =~ "rebase".*"reword" ]]; then
    exit 0
fi
Giacomo1968
  • 58,727
nhed
  • 274
2

I like this solution from https://blog.swwomm.com/2018/06/skip-pre-commit-hook-on-git-rebase-or.html:

Add this to the pre-commit hook script:

if [ "$NO_VERIFY" ]; then
    echo 'pre-commit hook skipped' 1>&2
    exit 0
fi

and then update NO_VERIFY when running the interactive rebase:

NO_VERIFY=1 git rebase -i master # or `git merge some-branch` or whatever
s6mike
  • 121