Help us understand the problem. What is going on with this article?

lint-staged で部分ステージングのみを対象に git add されるようになった

More than 1 year has passed since last update.

tl;dr

lint-staged@8.x から、ファイルの変更の一部だけをステージングしてコミット (pre-commit) した際に、変更部分だけを対象に git add が行えるようになりました。
というのが嬉しかったので周知したくて書きました。

参考:
🎉 Announcing lint-staged with support for partially staged files

lint-staged?

lint-stagedhusky などと組み合わせる事で、コミット時にファイルを linting できるツールです。
(詳細は 公式のドキュメント または他の Qiita やブログの記事を参照してください)

使い方はこんな感じになります。

package.json
{
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged"
    }
  },
  "lint-staged": {
    "linters": {
      "*.js": [
        "prettier --write",
        "eslint --fix",
        "git add"
      ]
    },
    "ignore": [
      "public/**/*"
    ]
  }
}

lint-staged の git add

lint-staged はフォーマット処理等を加えたファイルに対し、 pre-commit が終了する前に git add で再度ステージに追加することが出来ます。
husky, lint-staged のコードを追っていないのでこの理解は正確ではないかもしれません。)

ただ、この時にステージングされるのはステージングしていた差分ではなく ファイル全体の変更差分 なので、
ステージングしていたのが変更の一部だけだった場合に余計な部分までステージに入り、そのまま処理されてしまうため、意図しないコミットになってしまいます。

list-staged のバージョン 8 からこの問題が修正されており、
部分ステージングに対して lint-staged で指定の処理を実行し、その一部のみを再ステージングするということが可能になりました。
うれしい!

破壊的変更

設定等に変更は無いのですが、 Node.js のバージョンが指定されています。

Node >= 8.6 is required

ブログ記事と リリース には上記のように書いてありますが、
README.md を見ると v6 以降と書いてあり、どっちが何なんでしょう… :thinking:

The latest versions of lint-staged require Node.js v6 or newer.

どちらにせよ Node.js の v6 は来年4月でサポート切れるので、まだの人は早めにアップデートしておきましょう。
nodejs/Release: Node.js Foundation Release Working Group

shohei_ot
フリーのWebエンジニアです。フロントエンド、バックエンドをメインにやってます。動的に表示が切り替わるフロントエンドが好きです。 つまづいた事の共有とか情報整理に記事を書きます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away