こんにちは、さるまりんです。
ファイルを編集していると、
「どこを変えたんだっけ?」
となることがあります。
そんなとき、Gitを使っているなら便利なのが、
git diff
です。
diff は、英語の difference から来ていて、「違い」や「差」という意味があります。
その名前のとおり、git diff を使うと、ファイルの変更されたところを見ることができます。
今回は、git diff を使って、Gitで変更したところを見てみようと思います。
ファイルを変更してみる
例えば、Gitで管理している hello.txt というファイルがあるとします。
中には、
こんにちは
今日はいい天気です。
と書いてあります。
これを少し変更してみます。
こんにちは
今日はとてもいい天気です。
「とても」を追加しました。
Gitでは、
git status
を使うと、ファイルが変更されていることを確認できます。
modified: hello.txt
ただ、これだけでは、hello.txt のどこを変更したのかまでは分かりません。
そこで登場するのが git diff です。
git diffを使ってみよう
次のコマンドを実行します。
git diff
すると、例えばこのような表示が出ます。
-今日はいい天気です。
+今日はとてもいい天気です。
実際の git diff では、この前後にもファイル名や行番号などの情報が表示されます。
まず注目したいのは、
-
+
の部分です。
- は、変更前の内容。
+ は、変更後の内容です。
つまり、
-今日はいい天気です。
+今日はとてもいい天気です。
は、
「今日はいい天気です。」
という行が、
「今日はとてもいい天気です。」
になったことを表しています。
これなら、どこを変更したのか分かりますね。
変更したところを確認する習慣をつけよう
ファイルを編集していると、
「ここだけ変えたつもりだったけど、ほかのところも変えていた」
ということもあります。
そんなとき、コミットする前に、
git diff
で変更したところを見ておくと便利です。
例えば、
git status
で、
どのファイルが変わったのか
を確認して、
git diff
で、
そのファイルのどこが変わったのか
を確認する。
この2つを一緒に使うと、Gitで今どんな変更をしているのかが見えやすくなります。
以前、変えるつもりのない部分に全角のスペースを入れてしまって、プログラムが動かなかったことがありまして。
それ以降、自分が何を変えたかをちゃんと知っておくために、git diff で確認するようにしています。
git addしたあとにgit diffしてみる
では、変更した hello.txt をステージングしてみましょう。
git add hello.txt
そして、もう一度、
git diff
を実行します。
すると、何も表示されなくなりました。
「あれ?」
と思うかもしれません。
変更した内容は、まだコミットしていません。
それなのに、どうして git diff には表示されないのでしょうか。
git diffは何と何を比べている?
ここで、Gitの状態を少しだけ見てみます。
Gitでは、大まかに考えると、
作業しているファイル
↓
ステージングエリア
↓
コミット
という流れで変更を記録していきます。
通常の、
git diff
が見ているのは、
作業しているファイルとステージングエリアの違い
です。
git add をする前は、作業しているファイルには変更があります。
その変更は、まだステージングエリアには入っていません。
作業しているファイル
↓
変更されている
↓
ステージングエリア
という違いがあります。
そのため、git diff に変更内容が表示されます。
一方、
git add hello.txt
をすると、その変更がステージングエリアに追加されます。
すると、作業しているファイルとステージングエリアの内容に違いがなくなるので、
git diff
には何も表示されなくなります。
変更が消えたわけではありません。
比べている場所に違いがなくなった
ということなんですね。
ステージングした変更を見るには?
では、git add した変更を見るにはどうしたらいいのでしょうか。
そんなときは、
git diff --staged
を使います。
git diff --staged は、
ステージングエリアと、最後にコミットした内容の違い
を見るコマンドです。
さっきの変更をステージングしたあとなら、
-今日はいい天気です。
+今日はとてもいい天気です。
という変更を確認できます。
つまり、
git diff
と、
git diff --staged
では、見ている場所が違うのです。
ざっくり整理すると、
最後のコミット
↓
git diff --staged
↓
ステージングエリア
↓
git diff
↓
作業しているファイル
という関係になります。
diffは「違いを見る」ものです
git diff を、
変更したところを表示するコマンド
と覚えても、もちろん使えます。
ただ、
2つの状態の違いを見るもの
と考えてみると、少し分かりやすくなるかもしれません。
git diff
なら、
作業しているファイルとステージングエリア。
git diff --staged
なら、
ステージングエリアと最後のコミット。
Gitには、ほかにもコミット同士やブランチ同士など、いろいろな状態を比べる方法があります。
どれも基本にあるのは、
「こことここは、何が違うんだろう?」
という考え方です。
この基本が分かってくると、ブランチ同士の差分を見たり、過去のコミットと今の状態を比べたりするときにも、少し理解しやすくなります。
まとめ
今回は、git diff を使って変更したところを見る方法について見てきました。
git diff
を使うと、まだステージングしていない変更を見ることができます。
そして、
git diff --staged
を使うと、ステージングした変更を見ることができます。
最初は、
git status
で変更されたファイルを確認して、
git diff
で変更されたところを見る。
まずは、この使い方から始めてみるとよいと思います。
コミットする前に、
「何を変えたんだっけ?」
と思ったら、
git diff
を一度試してみてください。
Gitが今見ている「違い」が、少し見えてくるかもしれません。
他の使い方も、また詳しく見ていきたいです。
読んでくださってありがとうございました。
それではまた!