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

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

More than 5 years have passed since last update.

これは感動した。

ファイル保存時にエディタの設定で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)

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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