我已经配置了合并后的挂钩,以便与另一个版本控制系统(半手动)集成。 但是有时我想避免运行挂钩,是否有一种方法可以绕过git merge
的挂钩?
我知道对于git commit
,有一个--no-verify
命令行参数。那种解决方案非常适合我的用例,但似乎--no-verify
在git commit
命令中不起作用。
您可以通过以下方式暂时禁用Git钩子:
$ git config core.hooksPath # to see the current value
$ git config core.hooksPath '/dev/null'
$ git merge --continue
$ git config core.hooksPath '/value/you/had/before'
改编自这个有用的答案。
merge --continue
之后,我不得不使用 git config --unset core.hooksPath
,因为我的 hooksPath
最初返回了空值。你可以将这个加入到你的答案中。 - Ramon Dias一个简单的方法(无需更改配置文件)适用于我:
git merge main
git add .
git commit --no-verify
git push
这只是一个示例,您可以明确指定要添加哪些文件,并添加提交消息。当尝试 git merge --continue
时,我遇到了与 OP 相同的问题。
git 版本:2.35.1
对于那些因为 git merge --no-verify --continue
无法共同工作而来到这里的人 - 您可以暂时禁用挂钩以进行合并 - 例如,对于我的当前React项目,我只是从我的 package.json
中删除了这一部分 - 因为文件未暂存,它不会进入合并提交。
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{js,ts,tsx}": [
"eslint --fix --rule '@typescript-eslint/no-non-null-assertion: error'",
"prettier --write"
],
"*.css": [
"stylelint --fix",
"prettier --write"
],
"*.{json,yml,md,eslintrc,stylelintrc,babelrc}": [
"prettier --write"
]
},
pre-commit
,我必须启用无害的钩子,否则 pre-commit 会抱怨无效,并且合并将失败。 - Mattwmaster58没有标志可以禁用运行后合并挂钩,但是您可以轻松地设计自己的后合并挂钩(由于它在您自己的存储库中,因此您完全控制),以遵守环境变量。例如,一个shell脚本可能会开始:
#! /bin/sh
warn() {
echo "warning: $1" 1>&2
}
case ${SKIP_POST_MERGE_HOOK:-no} in
yes) exit 0;;
no) ;;
*) warn "mystery value ${SKIP_POST_MERGE_HOOK} for SKIP_POST_MERGE_HOOK";;
esac
... rest of code as usual ...
如果您现在想要运行git merge
,但要绕过挂钩(或运行类似于为您运行git merge
的便捷脚本 git pull
),只需在此期间设置SKIP_POST_MERGE_HOOK=yes
:
$ SKIP_POST_MERGE_HOOK=yes git merge ...
我使用了GIT_REFLOG_ACTION
环境变量来实现这个技巧。
当使用git pull
命令时,你会发现在git hook中GIT_REFLOG_ACTION=pull
。
因此,你可以像下面这样做:
# if git pull, abort
if [[ $GIT_REFLOG_ACTION == "pull" ]]; then
echo "git pull detected, aborting"
exit 0
fi
--no-verify
方面走上了正确的轨道,请参考这篇 Stack Overflow 帖子。 - Tim Biegeleisen