これは感動した。
ファイル保存時にエディタの設定でtrailing whitespaceを削除している場合などで、
実際にコミットしたい変更と、ただの空白の違いだけの行が大量に混ざっていて
分けようとする際に、git add -p
で何度もy/n
を繰り返すのが大変なときに使える。
下準備としてまずgit diff -w
の結果がコミットしたい内容だけになっているか確認する。
次に
$ git diff -w --no-color | git apply --cached
git diff --cached
で確認
今後も使いそうと思う場合はgitのaliasを追加すると良い。
addw = !"git diff -w --no-color | git apply --cached"
普段はあまり使いたい機会が無いかもしれないが、
特にオープンソースのコードを直接修正している時や、
ド素人時代の自分のコード含め、レガシーコードを修正している時などに
使いたい機会は訪れる。
コミットする際に、空白の違いだけの行と、意味のある変更行をどの程度分けるべきかについては、コードレビューの観点からできるだけ分けるべきだと思う。
要するに将来自分でも他人でも見返したときにdiffがノイズに感じるレベルのものは必ず分けるべき。
個人的には空白による違いが2行程度までの場合のみコミットを混ぜても良いかなという考え。
ただgit diff
の一塊の中に空白違いだけのものは結構ノイズになる。特に行末のやつ。分けるべき。
空白の違いだけのコミットはチームまたはプロジェクトレベルでコミットメッセージをある程度決めておくのも良いと思う。
自分の場合は"War on trailing whitespace"
とか"War against ..."
としている。
その前にチームであればエディタの空白除去の設定をそろえるべきだが。
(→ プロジェクトで統一した方が良い空白設定)
分けるメリットでもう一つ思い浮かぶのは、マージでCONFLICTが空白のdiffにより半端なくてやってられない時に、分けておけば空白除去だけのコミットを諦めて削除して戻して、マージしやすくすることも簡単にできる。