You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

husky+lint-staged校验失败导致git提交时丢失待处理变更如何解决?

你添加--no-stash参数后出现未暂存变更丢失,是因为该模式下lint-staged为了保证仅校验待提交的暂存区代码,会直接将暂存区的文件内容写入工作区,自然会覆盖同文件中未暂存的改动。

解决方案

你可以根据自己的需求选择以下任意一种方案,同时满足不丢失代码、不触发非预期自动暂存的要求:

方案一:升级lint-staged到v12及以上版本(推荐)

你最初遇到的「提交失败后变更消失」问题,是v12之前版本lint-staged的已知问题,新版本已经默认优化了逻辑:提交失败后会自动恢复所有stash的内容,不会出现变更消失的情况,你不需要额外添加--no-stash参数。
配置步骤:

  1. 升级lint-staged版本:
    npm i lint-staged@latest -D
  2. 恢复/.husky/pre-commit为默认配置:
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx lint-staged

该方案保留了lint-staged自动修复lint错误的能力,也不会出现变更丢失的问题。

方案二:关闭lint自动修复逻辑,保留--no-stash参数

如果你不想升级版本,也不需要lint自动修复错误,可以通过关闭自动修复的方式避免lint-staged修改工作区文件,也就不会覆盖未暂存变更:

  1. 修改项目根目录下的lint-staged配置文件(如.lintstagedrc.js),去掉lint命令中的--fix参数:
module.exports = {
  "*.{ts,html}": ["eslint --max-warnings 0"]
}
  1. 保留pre-commit中的--no-stash参数即可。

内容的提问来源于stack exchange,提问作者Roobot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:57:02