git格式化后在预提交中添加相同的文件,无法添加已删除的文件

git add same files in precommit after formatting, cannot add deleted files

我有一个反应项目,我们在每次推送之前手动格式化我们的代码。所以从逻辑上讲,我使用 husky.

设置 precommit 挂钩

这是预提交挂钩

#!/bin/sh
. "$(dirname "[=11=]")/_/husky.sh"

added_files=$(git diff --name-only --cached)

yarn fix
git add ${added_files}

我想“重新添加”相同的文件,正如提交作者的意图(yarn fix 运行在整个项目上)。

现在这个钩子工作得很好,直到我删除了一些文件。

git status的输出:

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   .babelrc
        modified:   .gitignore
        modified:   package.json
        modified:   public/index.html
        deleted:    src/App.css

git diff --name-only --cached 的输出:

.babelrc
.gitignore
package.json
public/index.html
src/App.css

pre-commit 钩子的输出:

yarn run v1.22.10
$ semistandard --fix
Done in 1.23s.
fatal: pathspec 'src/App.css' did not match any files
husky - pre-commit hook exited with code 128 (error)

似乎无法“重新添加”已删除的文件。什么是更好的解决方案?

原来是太简单了。通过添加 --diff-filter 修复,这将过滤掉已删除的文件。

#!/bin/sh
. "$(dirname "[=10=]")/_/husky.sh"

added_files=$(git diff --name-only --cached --diff-filter=d)

yarn fix
git add ${added_files}