Hatena::ブログ(Diary)

murankの日記

2011-03-20

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

| 20:05

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


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

git diff

ワーキングツリーとインデックスの差分を表示。

git add した後にさらに修正したけど、そういえばどの時点で git add したのかなー、というときに使う?

git add したらすぐにコミットする自分には関係なさそう。


f:id:murank:20110320130947p:image


git diff --cached

HEAD とインデックスの差分を表示。

git add して、コミットする前に差分を確認したい時に使うんだと思う。

自分は git diff よりもこっちの方をよく使う。


f:id:murank:20110320130950p:image


git diff HEAD

HEAD とワーキングツリーの差分を表示。

前にコミットした時からどれくらい編集したか確認したい時に使う。

HEAD の部分はコミット(HEAD、HEAD^ やコミットのハッシュ値)やブランチ、タグを指定できる。


f:id:murank:20110320130948p:image


git diff HEAD^..HEAD

コミット間の差分を表示。

ドット 2 つ (..) は空白でも OK。(git diff HEAD HEAD^ と同じ)

これも HEAD の代わりにコミットやブランチ、タグを指定できる。


f:id:murank:20110320130949p:image


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

コミットその1、コミットその2 の共通の親と コミットその2 の差分を表示。

コミットその1 と コミットその2 が同じブランチだと上のバージョンと同じ結果になる。

イメージで見たほうが多分分りやすい。


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

f:id:murank:20110320140504p:image



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

f:id:murank:20110320140503p:image




これ以外にもパッチを作ったり、出力形式をいじったりといろいろできるようだ。

ただ、正直そこまで使いこなせる気もしないし、使いこなす気もしない。


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

git-diff(1)

ギトギトギトギト 2012/07/30 21:57 開発時に困り、このサイトにたどり着きましたが、
とてもわかりやすい図で、参考になりました。助かりました!!
ありがとうございます。お気に入りに入れさせていただきました。

strange17strange17 2014/04/27 09:15 図がわかりやすくて良いです。ありがとうございます。

よしいくぞうよしいくぞう 2016/05/31 19:38 とても分かり易い解説ありがとうございます!
以下初心者質問ですみませんが、お教えいただけると有難いです。

>「git diff」ワーキングツリーとインデックスの差分を表示。
とありますが、git addしてない状態だと、インデックスは空っぽなので差分はでないはずでは…?

murankmurank 2016/06/02 20:52 >よしいくぞう さん
インデックスの概念はややこしいのですが、
git add していない時点ではインデックスは「空っぽ」なのではなくて
現在のHEADの内容(≒最後にコミットした内容)が入っています。

ですので、ワーキングツリー上のファイルを編集したのであれば
git addする前でもインデックス(≒最後にコミットした内容)から変わっていることになるので
差分が出てきます。

HEAD、インデックス、ワーキングツリーについては
こちらのスライドが分かりやすいと思いますので
あわせてご覧になってください。
http://www.slideshare.net/matsukaz/git-28304397/61

よしいくぞうよしいくぞう 2016/07/12 15:46 お返事ありがとうございます!!
なるほど。そういうことだったのですね。

分かり易い説明ありがとうございます。御陰様で理解できました。