Git コミット方法の違いについて

書籍「入門 git」を読んでいて第 4 章にコミットする 3 通りの方法について説明がありました。

  1. git add でステージングしてから git commit する
  2. git commit に -a オプションをつける
  3. git commit に ファイル名を指定する

add してから commit

$ git add Good.py
$ git commit -m "Add print func"

どういう形かで git add して、それから commit するやり方です。git add は -i オプションで対話モード、 -p でパッチモードが利用できるようです。

commit に -a オプション

$ git commit -a -m "Add fuga"

こうすると現在の作業ツリーの最新の状態をまるごとコミットすることになるようです。

commit にファイル名を指定

$ git commit -m "Add piyo" Good.py

こうすると現在の作業ツリーの中からコミットしたファイルだけを指定することができ、他のファイルはコミットされません。

最初に読んだときは -a かファイル名指定だけでよいのではと一瞬思ったのですが、add してから commit の利点として hunk(ファイル内の変更箇所)ごとのコミット要否を選択できることや、add したあとにファイルをさらに編集していたとしても git commit したときにコミットされるのは add した時点までの変更に限定されるという点があるのですね。ふむふむ。