git - 修复 merge 冲突后如何绕过预提交 Hook ?

标签 git husky git-husky lint-staged

TLDR:git rev-parse -q --verify MERGE_HEAD不处于 merge 状态时出错。当我们处于 merge 状态时,如何获得类似的命令会出错?

问题:当我将 master merge 到我的分支中并且它有冲突时,我必须手动更正它们,然后提交。但在某些情况下,我有太多来自 master 的更改,所以我宁愿跳过 pre-commit 钩子(Hook)。

部分解决方案:我可以运行 git commit --no-verify并把东西 merge ,但那是因为我知道标志。其他开发人员可能对此一无所知,因此(1)他们花费了比需要更多的时间等待预提交 Hook 运行和(2)因为它可能需要太长时间,他们往往不太可能重新 merge master(假设) .

几乎确定的解决方案:我找到了一种使用 git rev-parse -q --verify MERGE_HEAD 来检测我是否处于 merge 状态的方法。 .它在 merge 状态时返回一个哈希值,在非 merge 状态时出错。但我需要的恰恰相反。当我处于 merge 状态时,我需要它出错,所以我可以将它作为预提交钩子(Hook)添加到我的所有钩子(Hook)中。这会使它们在第一行失败,然后不执行以下命令。

  "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 反转效果。 ,即当我们处于 merge 状态时它应该出错。我怎样才能在一个简单的命令中做到这一点?

最佳答案

您是否考虑过否定初始命令的结果?例如

git rev-parse -q --verify MERGE_HEAD && false

如果您在 merge 中间,则右侧为 true,因此 false被评估并且命令以状态码1退出.

关于git - 修复 merge 冲突后如何绕过预提交 Hook ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61234845/

相关文章:

node.js - Husky 预提交 Hook 在提交后完成

git - 如何防止使用 husky 直接提交到 master 分支?

git - 带有预提交的 Pylint 和带有 husky 的 EsLlint

windows - 为什么 Windows 上的 git diff 会警告 "terminal is not fully functional"?

git - 如何仅在子目录中运行 husky 预提交

git - 为什么 git clean -dfX 不删除 .gitignore 中的 lib 文件?

node.js - 当我提交时如何获取 git commit 消息?

javascript - 无法使用 husky : . husky/pre-commit: line 4: npx: command not found 提交

swift - Git merge 后 Xcode 无法打开项目

Git 描述没有提供预期的标签