筆者が遭遇したシチュエーション(例)
ある機能追加をするタイミングでprettierの導入をしたが、prettier分のコミットと、機能追加のコミットを分けようと思った。
- 直前のコミット
- ファイルAのprettier適用差分
- 現在の状況
- ファイルBに処理追加。保存時prettierが適用され、両方の修正が混ざった状態になった
- ファイルBのprettier分を直前のコミットに混ぜて、機能追加は別途コミットしたい
対応
本説明ではvscodeとコマンド両方の操作が混ざっているが、以下のように対応した
1.ファイルBを行単位でコミットする
vscodeのgit(ソース管理)の「変更」でファイルBを選択すると、左右で差分表示される。
右ペインの変更部分の左に
→
+
このようなボタンが出るので、prettierの変更行のみ「+」をクリックしてstageに移していく。
試してはいないが、調べたところコマンドの git add -p
に相当する操作と思われる。
そうすると、変更分のみステージに上がる。
prettier分すべてステージに上げたらターミナルで下記実行する。
$ git commit --amend --no-edit
--amend
オプションは直前のコミットに変更を追加し、--no-edit
オプションはコミットメッセージをそのままにする。
vscodeの場合は、cmd + shift + p
をして、amend
と入力すると Git: Commit Staged (Amend)
というのが出てきて、おそらくこれを選択すれば良さそう。(未検証)
そしたらローカルの直前のコミットに含めることができるので、以下コマンドで強制的にpushする。
$ git push --force-with-lease
prettier分のコミットをまとめてpushすることができた。