139
136

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.

gitで空白の違いだけの行を除いてaddする

Last updated at Posted at 2012-12-15

これは感動した。

ファイル保存時にエディタの設定でtrailing whitespaceを削除している場合などで、
実際にコミットしたい変更と、ただの空白の違いだけの行が大量に混ざっていて
分けようとする際に、git add -pで何度もy/nを繰り返すのが大変なときに使える。

下準備としてまずgit diff -wの結果がコミットしたい内容だけになっているか確認する。
次に

$ git diff -w --no-color | git apply --cached

git diff --cachedで確認

今後も使いそうと思う場合はgitのaliasを追加すると良い。

.gitconfig
  addw = !"git diff -w --no-color | git apply --cached"

普段はあまり使いたい機会が無いかもしれないが、
特にオープンソースのコードを直接修正している時や、
ド素人時代の自分のコード含め、レガシーコードを修正している時などに
使いたい機会は訪れる。

コミットする際に、空白の違いだけの行と、意味のある変更行をどの程度分けるべきかについては、コードレビューの観点からできるだけ分けるべきだと思う。
要するに将来自分でも他人でも見返したときにdiffがノイズに感じるレベルのものは必ず分けるべき。

個人的には空白による違いが2行程度までの場合のみコミットを混ぜても良いかなという考え。
ただgit diffの一塊の中に空白違いだけのものは結構ノイズになる。特に行末のやつ。分けるべき。

空白の違いだけのコミットはチームまたはプロジェクトレベルでコミットメッセージをある程度決めておくのも良いと思う。
自分の場合は"War on trailing whitespace"とか"War against ..."としている。
その前にチームであればエディタの空白除去の設定をそろえるべきだが。
(→ プロジェクトで統一した方が良い空白設定)

分けるメリットでもう一つ思い浮かぶのは、マージでCONFLICTが空白のdiffにより半端なくてやってられない時に、分けておけば空白除去だけのコミットを諦めて削除して戻して、マージしやすくすることも簡単にできる。

参考:StackOverflow(Git add only non-whitespace changes)

139
136
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
139
136

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?