Git の diff を理解するには、まず以下の3か所の、どの部分間での差分を取りたいのかを意識する必要があります。
git add
で index に追加されたハンク)git add
されていない変更) +------------+ +--------------+ +--------------+
| Repository |<--------------------->| Staging Area |<------------>| Working Tree |
+------------+ git diff --cached +--------------+ git diff +------+-------+
| (--staged) |
+------------------------------------------------------------------+
git diff HEAD
ステージングエリアに入った変更、つまり次回のコミットの対象となっている変更部分を調べたい場合は以下のようにします。
$ git diff --cached
$ git diff --staged(新しいバージョンで追加された方法)
ステージングエリアに登録されていない変更、つまり、まだ git add
されていない作業ツリー上での変更を調べたい場合は以下のようにします。新規に作成されたファイルに関しては表示されません。
$ git diff
上記の2つの差分表示を両方合わせたものです。
$ git diff HEAD
リポジトリ内の任意のリビジョンを指定することもできます。
$ git diff b374ef1
git diff
を --stat
オプションを指定して実行すると、2 つのリビジョン間で、どのファイルが何行変更されたかのグラフを表示してくれます。
$ git diff --stat 14a59bd
aaa.txt | 30 ++++++++++++++++++++++++++++++
bbb.txt | 12 ++++++++++++
ccc.txt | 5 ++---
ddd.txt | 2 --
eee.txt | 1 +
5 files changed, 45 insertions(+), 5 deletions(-)
上記のように、2 つ目のリビジョンを省略すると、HEAD までの差分とみなされます。