diffの出力に戸惑ったので整理した
差分を確認したいときに、
git diff
だけだと、
- ステージングしたあとはどう確認するんだっけ
- 変更のある全ファイル分表示されて目的の箇所を見つけにくい
など、使うたびに迷っていた気がするので、オプションの紹介やコミット後の差分の取り方も併せて、記載していきます。
書いてあること
- git diffでステージング済みの変更差分を確認する方法
- コミット済みの変更差分を確認する方法
- git log -p の「-p」ってなに?というところ
書いていないこと
- patchに関する詳細
- git diffやgit logのオプション網羅
結論
ステージング前の変更差分を見るには
git diff
ステージング後の変更差分を見るには
git diff —-cached
もしくは
git diff —-staged
そして、コミット後の変更差分を見るには、
git log -p
を使います。
参照するドキュメント
man git-diff
で、git diffのマニュアルを見ていきます。
man git diffじゃないんですね。
マニュアルの見つけ方ですが、man git とすると、けっこう下の方の
HIGH-LEVEL COMMANDS (PORCELAIN)
のところに、
git-diff(1)
Show changes between commits, commit and working tree, etc.
とあり、git diffのmanは「git-diff」と指定すれば良いことがわかります。
余談
Gitのコマンドはporcelainコマンドと、plumbingコマンドに分かれています。
GIT COMMANDS
We divide Git into high level ("porcelain") commands and low level ("plumbing") commands.
Porcelainはユーザーフレンドリーな、いわゆるgitのコマンド
PlumbingはUNIX流につなぎ合わせたり、スクリプトから呼んだりすることを主眼において設計されている低レベルの配管コマンドのこと
上記は別記事参照
実際の使い方
git diff --cached
ステージングされたファイルのdiffを表示する
もしくは「—staged」は「—cached」のsynonym(同義語、シノニム)なので、
git diff --staged
でも良いらしい。manに書いてあったので今回知りました。
用法としては
git diff [<options>] --cached [--merge-base] [<commit>] [--][<path>...]
なので、
- 特定のコミットからのdiffを表示する(デフォルトはHEADから)
- pathで指定されたファイルについてのdiffを表示する
という使い方もできます。
そこはこの記事では触れません。
まとめると、
ステージング前の変更差分を見るには
git diff
ステージング後の変更差分を見るには
git diff —-cached
もしくは
git diff —-staged
そしてコミット後の変更差分を見るには、
git log -p
となります。
ちなみに、
git log の-pオプションは「-patch」の略で、
git logの出力に差分を表示するものです。
ここで「patch」という語がよくわからなくなります。
git logの-pオプションを見ると「Generate patch」という解説がされていますが、
「差分を表示する」
のと
「Generate patch(パッチを作成する)」
という語には別の意味あいが含まれている感じがします。
-p, -u, --patch
Generate patch (see the section called “GENERATING PATCH TEXT WITH -P”).
もともとUnix系のプログラムコードの更新には、diffで出力した差分をpatchという更新用途のファイルにして配布する(テキストの更新も含む)という方法があり、その流れを汲んだ名前ということになります。
https://ja.wikipedia.org/wiki/Patch
そのため、出力したdiff=patchということになります。
コミット前の変更差分はgit diffで表示できますが、
コミット後の変更差分は「patch」という扱いになりgit log —patch(省略してgit log -p)になる、
という考え方になります。
以上
git diffのよく使う方法と、ステージング後、コミット後の差分の確認の仕方でした!