husky+lint-staged校验失败导致git提交时丢失待处理变更如何解决?
你添加--no-stash参数后出现未暂存变更丢失,是因为该模式下lint-staged为了保证仅校验待提交的暂存区代码,会直接将暂存区的文件内容写入工作区,自然会覆盖同文件中未暂存的改动。
解决方案
你可以根据自己的需求选择以下任意一种方案,同时满足不丢失代码、不触发非预期自动暂存的要求:
方案一:升级lint-staged到v12及以上版本(推荐)
你最初遇到的「提交失败后变更消失」问题,是v12之前版本lint-staged的已知问题,新版本已经默认优化了逻辑:提交失败后会自动恢复所有stash的内容,不会出现变更消失的情况,你不需要额外添加--no-stash参数。
配置步骤:
- 升级lint-staged版本:
npm i lint-staged@latest -D - 恢复/.husky/pre-commit为默认配置:
#!/bin/sh . "$(dirname "$0")/_/husky.sh" npx lint-staged
该方案保留了lint-staged自动修复lint错误的能力,也不会出现变更丢失的问题。
方案二:关闭lint自动修复逻辑,保留--no-stash参数
如果你不想升级版本,也不需要lint自动修复错误,可以通过关闭自动修复的方式避免lint-staged修改工作区文件,也就不会覆盖未暂存变更:
- 修改项目根目录下的lint-staged配置文件(如.lintstagedrc.js),去掉lint命令中的
--fix参数:
module.exports = { "*.{ts,html}": ["eslint --max-warnings 0"] }
- 保留pre-commit中的
--no-stash参数即可。
内容的提问来源于stack exchange,提问作者Roobot
相关产品推荐
相关产品推荐

