TLDR:git rev-parse -q --verify MERGE_HEAD
不在合并状态时会出错。在合并状态下,如何获得类似的错误消息?
问题:当我将master合并到分支中并且有冲突时,我必须手动更正它们,然后提交。但是在某些情况下,我有太多来自主服务器的更改,所以我宁愿跳过预提交钩子。
部分解决方案::我可以运行git commit --no-verify
并合并所有内容,但这是因为我知道该标志。其他开发人员可能对此一无所知,因此(1)他们花了比所需时间更多的时间来等待预提交的钩子运行;(2)由于花费的时间太长,他们倾向于不太可能重新合并主服务器(假设)
几乎确定的解决方案::我找到了一种方法,可以使用git rev-parse -q --verify MERGE_HEAD
来检测自己是否处于合并状态。处于合并状态时,它返回一个哈希值;而在非合并状态时,它会返回错误。但是我所需要的恰恰相反。当我处于合并状态时,我需要它来出错,因此我可以将其作为预提交钩子添加到我的所有钩子中。这会使它们在第一行中失败,然后不执行以下命令。
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.js": [
"git rev-parse -q --verify MERGE_HEAD",
"eslint --max-warnings 0 --fix"
],
"*.scss": [
"git rev-parse -q --verify MERGE_HEAD",
"stylelint 'app/**/*.scss'"
],
"*.{js,json,yml,scss,md}": [
"git rev-parse -q --verify MERGE_HEAD",
"prettier --write"
],
"*": [
"bundle exec rubocop --auto-correct --force-exclusion"
]
},
请注意,上述无效。为了使它起作用,我们所需要做的就是从git rev-parse -q --verify MERGE_HEAD
反转效果,即,当我们处于合并状态时,它应该会出错。如何通过简单的命令执行此操作?
答案 0 :(得分:1)
您是否考虑过否定初始命令的结果?例如
git rev-parse -q --verify MERGE_HEAD && false
如果您在合并的中间,则右侧为true,因此false
得到评估,并且该命令以状态代码1
退出。
答案 1 :(得分:1)
如果您不想在解决合并冲突后在预提交钩子上运行lint-staged
脚本,则可以执行以下代码片段中的操作。我添加了--no-revs
只是为了不显示不需要的输出
"husky": {
"hooks": {
"pre-commit": "git rev-parse -q --no-revs --verify MERGE_HEAD || lint-staged"
}
},