9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-11-02

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

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?