まくまくGitノート
Git / git diff でファイルの差分を調べる
2010-07-14

さまざまな差分を理解する

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 までの差分とみなされます。

2010-07-14