ほげほげ見聞録

技術メモ、備忘録、使い方はそのうち覚える

git:差分取得

ファイルの差分を取得するのに便利なコマンド集。

最初のコミットにBASEタグをつける。HEADは最新コミットのタグ。

差分のファイル名を表示

コミットIDかタグ、ブランチ間の差分を表示。ファイルの内容まで表示する。ファイル名を指定すると、そのファイルについてのみ差分を表示する。

$ git diff BASE HEAD filename

--name-onlyを指定すると、ファイル名の一覧だけ表示する。
--name-statusを指定すると、変更属性とファイル名の一覧を表示する。

$ git diff --name-only BASE HEAD

indexとHEADの差を表示

次のコミットで反映される内容(addしてあるファイル)。

$ git diff --cached

差分をzipファイル出力

フォーマットはtarかzip。フォルダ構成はそのままで、差分のファイルのみ出力可能。
fatal errorが出た場合、削除したファイルをどうにかして戻せばOK。または、差分のフィルターを使えばいい…?

$ git archive --format=zip HEAD `git diff --name-only BASE HEAD` -o diff.zip

差分のフィルター

--diff-filterにファイルの属性を指定すると、指定の変更属性ファイルのみ差分をとる。
属性は追加(A)、コピー(C)、削除(D)、修正(M)、リネーム(R)等々。属性を複数指定する場合は、そのまま連続して表記。

$ git diff --diff-filter=M

追加と削除の行数表示

追加と削除の行数とファイルパスを表示する。変更は追加削除の両方を行ったとカウントされる模様。

$ git diff --numstat
41      48      svn/trunk/home/procedure/consult/buyer_rename.html
11      11      svn/trunk/home/procedure/consult/credit_reporting.html

差分の割合を表示

変更されたファイルの一覧と変更行数を表示。追加が+、削除が-で表示。

$ git diff --stat

ディレクトリ毎の変更割合を表示。割合が小さいと表示されないらしい。

$ git diff --dirstat

difftool

WinMergeを設定できる。
P4Merge はディレクトリーの比較に対応してないので、--dir-diff には活用できない。