绕过预提交钩子进行合并提交

Nix*_*Nix 13 git git-submodules githooks

我设置了一些git钩子来gulp在预提交上运行一些命令.我基本上跑jshint/ plato.我基本上想要绕过这两种情况:

  1. 修补程序分支(主/修补程序)
  2. git merge(或者以一种不会在合并提交的情况下崩溃的方式找到一种方法)

plato gulp命令在源上运行分析并生成跟踪复杂性的/ reports /目录.如果我们在修补程序分支上执行此操作,则在将它们合并回开发时会导致合并冲突.这里足够的说话是简单的钩子:

#!/bin/sh

if git diff --cached --name-only --diff-filter=ACM | grep '.js$' >/dev/null 2>&1
then
  git stash -q --keep-index
  ./node_modules/.bin/gulp jshint
  RESULT=$?
  git stash pop -q
  [ $RESULT -ne 0 ] && exit 1
  git stash -q --keep-index
  ./node_modules/.bin/gulp plato
  git add report/
  git stash pop -q
fi

exit 0
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果我在"报告"上有合并冲突,我解决了合并All conflicts fixed but you are still merging.,然后提交它再次运行分析并分阶段提交,当它提交时抛出一个错误:

/Users/Nix/work/project/.git/modules/somesubmodule/MERGE_HEAD'用于阅读:没有这样的文件或目录.

该目录确实存在,但没有合并头...

Nix*_*Nix 18

所以我刚刚找到一个命令,我认为我可以使用它来检测"merge_head"

 git rev-parse -q --verify MERGE_HEAD
Run Code Online (Sandbox Code Playgroud)

如果rev-parse返回一个哈希,意味着我们当前处于合并状态.我可以用它绕过这个逻辑.但是会等待更有经验的人提供更好的建议.

  • 如果您要变基,您可以使用以下命令执行相同的操作:`git rev-parse -q --verify REBASE_HEAD` (2认同)