Gitで一部の変更だけをコミットする

全ファイルコミットできる単位でコミットしろよ←わかる

全ファイルをコミットする

一番簡単。だいたいこれでやってる気がする。

$ git add -A

一部のファイルだけコミットする

普通。

$ git add foo.c bar.c baz.c

一部の hunk だけコミットする

$ git add -p

ってやると hunk を stage するか聞かれるので stage したい hunk で y と答える。

hunk の一部だけコミットする

変更がくっついていると違う内容の変更が 1 個の hunk に入ってしまったりする。

$ git add -p

した後に追加したい変更が入っている hunk で e と答える(え?) するとテキストエディタが起動して,diff を編集しろと言ってくる。 で,これは編集しろと言ってくるファイルにも書いてあるが,

  • - で始まる行(削除した行)をなかったことにしたかったら - (スペース)で置き換える
  • + で始まる行(追加した行)をなかったことにしたかったらその行自体を削除する

という感じで編集すると望んだ部分だけを stage することができる。 間違っても死ぬわけじゃないのでそんなに恐れずやっていいと思う。

追記

Windows でやると Git 付属の nano が開くが、これで編集するとうまくいかなかったりした。 将来的には解消するのかもしれないが、nano で開いた後に別のエディタで編集しないとエラーになるかもしれない (改行コードの問題か?)。 そのときは .git/addp-hunk-edit.diff を編集すれば良い。