Follow twitter

Git diff 差分確認

今回はGitのdiffについて述べます。
gitでWork treeからaddしてIndexにStagingしたり、
commitしてローカルリポジトリに反映させたりするときに、
作業前後で確認したくなりますよね。
そういうときはdiffコマンドを使用します。

git diff で Working treeとIndex(Staging)の差分を確認する

おさらいですが、Working treeは自分のPCなどの作業フォルダ。
IndexはaddしてStagingされてる場所。
Local RepositoryはCommitしたときに反映される場所です。

画像に alt 属性が指定されていません。ファイル名: image-33.png

Working treeでファイルの内容を変更したとします。
そして、git add . でStagingしようとする前にgit diffを使用すると、
Index と Work treeの差分が確認できます。
つまり、これからaddしてStagingする内容を確認できます。
ただし、Working treeに新規にファイルを入れた場合はgit diffで確認できません。
もともとGitでトレースできてたファイルについてdiffで確認できるだけです。

$git diff #Work treeとStagingの差分を確認する

例えば、Test_gitdiff.txtをWork treeで新規に編集したとします。
変更前:git diffのテストファイルです
変更後:git diffのテストファイルです git diffで変更が確認できるかテストします

変更前
変更後

$git diff で確認してみますと以下のような結果でます。

マイナスの赤字部分が変更前、プラスの緑字部分が変更後と表示されます。

–name-only オプションを用いて変更ファイル名だけ表示する

上記の通り、git diffを用いてWork treeとIndexの差分を確認した結果、
変更内容が表示されるようになりました。
しかし、変更内容が多いとすべて表示されてしまうという欠点もあります。

変更内容を表示せずに変更したファイル名だけを表示したい場合は、
オプション –name-onlyを使用します。

$git diff --name-only #差分確認をファイル名だけ表示する
$git diff –name-only オプション使用結果

すっきりしましたね。

現状、Working treeはIndexとTest_gitdiff.txt というファイルについて差分があるよ、
ってことがわかります。

では、addしてIndexにStaging してみます。

$ git add Test_gitdiff.txt #IndexにStagingする
$ git diff --name-only #IndexとWorking treeの差分ファイル名を表示させる
$ git diff #IndexとWorkin treeの差分を表示する

addした後に$git diffをしてみると何も返って来なくなりました。つまりWorking treeとIndexの差分がなくなった。
つまりちゃんとaddでStagingできたよって確認できますね。

git diff –stagedで Index(Staging)とLocal Repositoryの差分を確認する

addしてStagingができたら続いてはcommitしてLocal Repositoryに反映していきますよね。
commitする前に、Index(Staging)とLocal Repositoryの差分確認は–staged オプションを使用します。

$git diff --staged #Index(Staging)とLocal Repositoryの差分を確認する
$git diff –stagedによる確認

ちゃんと差分が確認できますね。Work treeとIndexの差分のときと同様に、
ファイル名だけの表示にするときは–name-onlyオプションを使用しましょう

$git diff --staged --name-only
$git diff –staged –name-onlyでの確認

ちゃんとファイル名だけの表示ができてますね。

あとは同様に、commitしたあと、差分がなくなるか(ちゃんと反映できたか)確認します。

$git commit -m "Test_gitdiff ファイルを変更"
$git diff --staged -name-only

ちゃんと何も返って来なくなりました。ちゃんと反映されてますね。

git diff HEAD でHEAD(Local Repository)とWorking treeとの差分を確認する

ちなみにHEAD(Local Repository)とWorking treeの差分はgit diff HEADで確認できます。

$git diff HEAD #Working treeとHEADとの差分表示

git diff HEAD^..HEADでコミットの差分を確認する

コミットの差分を確認するには

$git diff HEAD^..HEAD #HEAD^とHEADの差分を確認する

HEAD^は1つ前のHEADという意味です。
..は間って言う意味の理解でいいと思います。from..toって感じです。
変更前..変更後って覚えればいいかなと思います。
ちなみに半角スペースでも同じ意味となります。

$git diff HEAD^ HEAD #..が半角スペースでも一緒

ちなみにコミット同士の比較をするときはそれぞれのSHA-1を入れれば確認できます。

$git diff 変更前のSHA-1..変更後のSHA-1

終わりに

diffには他にも色々比較できたり、オプションがありますが、
今回はよく使う上記について紹介しました。

Have a nice Git life!