あるファイルが過去の状態からどの様に更新されたか差分を調べてみましょう。

状態 9 のままだとワーキングツリーとインデックスとHEADが同じ状態で面白くないので、次の手順でファイルを更新します。

hoge.txt に c を追加(改行しない)して保存
git add hoge.txt でインデックスに hoge.txt を登録
hoge.txt に d を追加(改行しない)して保存

すると次の状態 10 に変わります。ワーキングツリー、インデックス、HEADの hoge.txt の違いに注目して下さい。


状態 10


ワーキングツリー
hoge.txt
abcd
piyo.txt
AB


インデックス
hoge.txt
abc
piyo.txt
AB


ローカルリポジトリ「gitlocal」
HEAD
hoge.txt
ab
piyo.txt
AB
"piyo.txtを更新(S9)"
HEAD~
hoge.txt
ab
piyo.txt
A
"hoge.txtを更新(S8)"
HEAD~2
hoge.txt
a
piyo.txt
A
"piyo.txtを追加(S5)"
HEAD~3
hoge.txt
a
"hoge.txtを追加(S4)"

(1) ワーキングツリーとインデックス間の差分

まずはワーキングツリーとインデックス間の差分を見る方法です。
実際の開発中は一番良く使うコマンドです。

ワーキングツリーとインデックス間(インデックス → ワーキングツリー)の差分:
git diff <ファイル名>

※ ファイル名を省略すると更新した全てのファイルの差分を表示します。
※ ファイル名を「.」(ドット)にすると現在のディレクトリ以下で更新した全てのファイルの差分を表示します。

例えば状態 10 で git diff hoge.txt を実行すると

-abc
+abcd

と表示されます。
-が付いている行が削除された行、+が付いている行が追加された行になります。


(2) ワーキングツリーと指定したコミット間の差分

次はワーキングツリーと指定したコミット間の差分を見る方法です。

ワーキングツリーと指定したコミット間(コミット → ワーキングツリー)の差分:
git diff <コミット> <ファイル名>

※ ファイル名を省略すると更新した全てのファイルの差分を表示します。
※ ファイル名を「.」(ドット)にすると現在のディレクトリ以下で更新した全てのファイルの差分を表示します。
※ コミットの所を HEAD にすると HEAD との差分になります。

(3) インデックスと指定したコミット間の差分

次はインデックスと指定したコミット間の差分を見る方法です。

インデックスと指定したコミット間(コミット → インデックス)の差分
git diff --cached <コミット> <ファイル名>

※ ファイル名を省略すると更新した全てのファイルの差分を表示します。
※ ファイル名を「.」(ドット)にすると現在のディレクトリ以下で更新した全てのファイルの差分を表示します。
※ コミットの所を HEAD にすると HEAD との差分になります。

(4) 指定したコミット間の差分

最後は指定したコミット間の差分を見る方法です。

指定したコミット間(コミットA → コミットB)の差分:
git diff <コミットA> <コミットB> <ファイル名>

※ ファイル名を省略すると更新した全てのファイルの差分を表示します。
※ ファイル名を「.」(ドット)にすると現在のディレクトリ以下で更新した全てのファイルの差分を表示します。
※ コミットの所を HEAD にすると HEAD との差分になります。