綾小路龍之介の素人思考

[git] diff の引数指定方法まとめ

引数指定のルールは以下。ワーキングツリーとの比較はコミット番号。インデックスとの比較は--cached とコミット番号。コミット同士の比較はコミット番号 2 つを ".." で連結。比較対象の入れ替えは -R。2 つのコミット同士の比較には source と destination に気をつけること。

下の表のセルの中に書かれた内容を git diff の後ろに続ける。

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

リファレンス

  1. git-diff(1) - Linux man page

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2010-05-01T03:25:00+09:00
  2. Modified: 2010-05-01T03:25:00+09:00
  3. Generated: 2017-04-12T23:09:49+09:00