下の表のセルの中に書かれた内容を git diff の後ろに続ける。
git diff | b (destination) | ||||||
---|---|---|---|---|---|---|---|
commit0 | ... | commitX | HEAD | index | working tree | ||
a (source) | commit0 | commit0..commit0 | ... | commit0..commitX | commit0..HEAD | --cached commit0 | commit0 |
... | ... | ... | ... | ... | ... | ... | |
commitX | commitX..commit0 | ... | commitX..commitX | commitX..HEAD | --cached commitX | commitX | |
HEAD | HEAD..commit0 | ... | HEAD..commitX | HEAD..HEAD | --cached HEAD | HEAD | |
index | -R --cached commit0 | ... | -R --cached commitX | -R --cached HEAD | ????? | ||
working tree | -R commit0 | ... | -R commitX | -R HEAD | -R | ????? |
昔ながらの diff
通常、diff は以下の形式をとる。ここでの source と destination を使って git の挙動を説明していく。
$ diff source destination
git diff でインデックスとワーキングツリーの比較
git の以下のコマンドを、上の形式で解釈すると、「インデックスを source、ワーキングツリーを destination としたときの diff を取る。」という意味。
$ git diff diff --git a/po/ja.po b/po/ja.po index bd307c1..18e8c64 100644 --- a/po/ja.po +++ b/po/ja.po @@ -21,7 +21,7 @@ msgstr "" "Project-Id-Version: WeeChat 0.3.8-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "POT-Creation-Date: 2012-02-29 14:32+0100\n" -"PO-Revision-Date: 2012-03-05 00:24+0900\n" +"PO-Revision-Date: 2012-03-05 00:25+0900\n" "Last-Translator: \"AYANOKOUZI, Ryuunosuke\" <i38w7i3@yahoo.co.jp>\n" "Language-Team: Japanese\n" "Language: ja\n" @@ -6222,7 +6222,7 @@ msgstr "%1$s %9$s%10$s%9$s がモードを変更 %2$s%3$s %4$s[%5$s%6$s%7$s]%8$s #, c-format msgid "%sUser mode %s[%s%s%s]%s by %s%s" -msgstr "%1$s %7$s%8$s がユーザモードを変更 %2$s[%3$s%4$s%5$s]%6$s" +msgstr "%1$s %7$s%8$s%7$s がユーザモードを変更 %2$s[%3$s%4$s%5$s]%6$s" #, c-format msgid "%sYou are now known as %s%s%s"
diff の出力には以下のような行が含まれる。ヘルプによれば、source に付く prefix は 'a/'、destination に付く prefix は '/b' でそれぞれ、--src-prefix と --dst-prefix でこれを変更できる。
diff --git a/po/ja.po b/po/ja.po
git diff -R で比較対象の入れ替え
source と destination を入れ替えるには -R オプションを使う。「ワーキングツリーを source、インデックスを destination としたときの diff を取る。」という意味。以下のように diff の出力に違いが生まれることがわかる。
$ git diff -R diff --git b/po/ja.po a/po/ja.po index 18e8c64..bd307c1 100644 --- b/po/ja.po +++ a/po/ja.po @@ -21,7 +21,7 @@ msgstr "" "Project-Id-Version: WeeChat 0.3.8-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" "POT-Creation-Date: 2012-02-29 14:32+0100\n" -"PO-Revision-Date: 2012-03-05 00:25+0900\n" +"PO-Revision-Date: 2012-03-05 00:24+0900\n" "Last-Translator: \"AYANOKOUZI, Ryuunosuke\" <i38w7i3@yahoo.co.jp>\n" "Language-Team: Japanese\n" "Language: ja\n" @@ -6222,7 +6222,7 @@ msgstr "%1$s %9$s%10$s%9$s がモードを変更 %2$s%3$s %4$s[%5$s%6$s%7$s]%8$s #, c-format msgid "%sUser mode %s[%s%s%s]%s by %s%s" -msgstr "%1$s %7$s%8$s%7$s がユーザモードを変更 %2$s[%3$s%4$s%5$s]%6$s" +msgstr "%1$s %7$s%8$s がユーザモードを変更 %2$s[%3$s%4$s%5$s]%6$s" #, c-format msgid "%sYou are now known as %s%s%s"
git diff commit0..commitX でコミット同士の比較
コミットを確認するには git log を見て commit の後ろにある文字列を確認。
$ git log | grep commit commit commitX commit commitW commit commitV ... commit commit0
commit ログにある 2 つのコミットの比較を行うには、コミット番号同士を ".." でつなげる。「commit0 を source、commitX を destination としたときの diff を取る。」という意味。
$ git diff commit0..commitX
commit 番号を入れ替えれたり、-R を使うことも出来る。「commitX を source、commit0 を destination としたときの diff を取る。」という意味。ただし、2 つの実行結果は異なった結果になる。
$ git diff commitX..commit0 $ git diff -R commit0..commitX
この方法は commit されていないリビジョンには使えない。つまり、ワーキングツリー (ディスク上のファイル状態) とインデックス (git add された次回 commit 予定のファイル状態) には使えない。
git diff commitX でワーキングツリーとコミットの比較
「commitX を source、ワーキングツリーを destination としたときの diff を取る。」という意味。
$ git diff commitX
「ワーキングツリーを source、commitX を destination としたときの diff を取る。」という意味にしたければ -R をつける
$ git diff -R commitX
git diff --cached commitX でインデックスとコミットの比較
「commitX を source、インデックスを destination としたときの diff を取る。」という意味。
$ git diff --cached commitX
「インデックスを source、commitX を destination としたときの diff を取る。」という意味にしたければ-R をつける
$ git diff -R --cached commitX