git diff の使い方がほんの少し理解できた

いままでなんとなく使ってきたけど、ようやく使い方が分かったような気がするのでメモ。

前提知識
  • インデックスとワーキングツリーが理解できていること
  • HEAD が何か分かっていること

git diff

ワーキングツリーとインデックスの差分を表示。
git add した後にさらに修正したけど、そういえばどの時点で git add したのかなー、というときに使う?
git add したらすぐにコミットする自分には関係なさそう。


git diff --cached

HEAD とインデックスの差分を表示。
git add して、コミットする前に差分を確認したい時に使うんだと思う。
自分は git diff よりもこっちの方をよく使う。


git diff HEAD

HEAD とワーキングツリーの差分を表示。
前にコミットした時からどれくらい編集したか確認したい時に使う。
HEAD の部分はコミット(HEAD、HEAD^ やコミットのハッシュ値)やブランチ、タグを指定できる。


git diff HEAD^..HEAD

コミット間の差分を表示。
ドット 2 つ (..) は空白でも OK。(git diff HEAD HEAD^ と同じ)
これも HEAD の代わりにコミットやブランチ、タグを指定できる。


git diff コミットその1...コミットその2

コミットその1、コミットその2 の共通の親と コミットその2 の差分を表示。
コミットその1 と コミットその2 が同じブランチだと上のバージョンと同じ結果になる。
イメージで見たほうが多分分りやすい。


git diff Y...D (ドット 3 つ版)



参考: git diff Y..D (ドット 2 つ版)




これ以外にもパッチを作ったり、出力形式をいじったりといろいろできるようだ。
ただ、正直そこまで使いこなせる気もしないし、使いこなす気もしない。


もっと使いこなしたい人はマニュアルを参照してください。
git-diff(1)