未来エンジニア養成所Blog

プログラミングを皆に楽しんでもらうための情報をお届けします。

【Git&GitHub】何を変更したのかを確認(git diffコマンド)

title


何を変更したのかを確認しよう

今回の解説では何を変更したのか、どんな変更をしたのかというのを確認するやり方について見ていきます。


「git status」コマンドと同じでコミットやステージに追加する前にどんな変更をしたのか、それを確認する癖を付けていってください。

「git status」コマンドについてはこちらを確認してください。 phoeducation.work


それでは変更差分(変更したファイルの中身)を確認するコマンドについて見ていきましょう。


変更差分を確認するコマンドは「git diff」コマンドを使います。

「diff」というのは「difference」の略です。

もし特定のファイルの変更差分を見たい場合は「git diff <ファイル名>」と入力します。

$ git diff
$ git diff <ファイル名>


こちらの「git diff」コマンドは「git add」する前の変更分も見れるのですが、「git add」した後の変更分を見たい場合は「git diff --staged」というオプションを付けます。

$ git diff --staged


「--staged」というのは、ステージしたけどまだコミットしていない分の変更分を確認するよ、という意味になります。


それではいつも通りイメージで押さえておきましょう。


ワークツリーとステージの間の変更差分を確認するのが「git diff」コマンドです。

そしてステージとリポジトリの間の変更差分を確認するのが「git diff --staged」コマンドになります。


変更差分を確認する


いつものように、「git diff」コマンドの裏側で起こっていることを確認します。

こちらはあくまで補足なので、上の図を頭に入れておいて頂ければ大丈夫です。


状況として、「index.html」というファイルがあって、コミットしたところだとしましょう。


「git diff」コマンドでなにが起こるのか。

「git diff」コマンドではまずワークツリーとステージとの変更の差分が表示されます。

ステージには、インデックスに前回「git add」した時のスナップショットが保存されているので、そのスナップショットとワークツリーの情報の変更差分を「git diff」では表示しています。


そして、ステージとリポジトリとの変更差分を表示しているのが「git diff --staged」です。

コミットの方に前回コミットした時のスナップショットの情報が保存されているので、コミットのスナップショットとステージのスナップショットを比較して、その違いを「git diff --staged」で表示しています。

git diffコマンドの裏側で起こっていること


実際にやってみよう

ではターミナルを開いて「git diff」コマンドを実践していきましょう。


「git_tutorial」ディレクトリに移動します。

ここで「git diff」と入力して実行して見ましょう。

$ git diff


今は何のファイルの変更もしていないので、何も表示されません。


ここでファイルの変更をしていきます。


テキストエディタで「index.html」ファイルを開きます。

今回は「<p>git diff</p>」と追記してみましょう。

追記したら保存してターミナルに戻ります。


ファイルを変更した状態で「git diff」コマンドを実行します。

$ git diff
diff --git a/index.html b/index.html
index a66864d..47028db 100644
--- a/index.html
+++ b/index.html
@@ -1,2 +1,3 @@
 <h1>Gitチュートリアル</h1>
 <p>git status</p>
+<p>git diff</p>


すると変更した分が表示されています。


「+」のところが変更された、追記された分です。

今回は「<p>git diff</p>」が追記されたことが分かります。


では、この変更分をステージに追加しましょう。

「git add index.html」と入力します。

$ git add index.html


これでステージに追加することができました。


それでは「git diff」コマンドを実行しましょう。

$ git diff

ここでは何も表示されなくなりました。

これはなぜかというと、「git diff」コマンドで表示するのはワークツリーとステージの間の変更差分だったからです。


今回「git add」したことで、ワークツリーとステージの間に違いは無くなりました。

そのため「git diff」しても何も表示されなくなっています。


では次に「git diff --staged」を実行して見ましょう。

$ git diff --staged
diff --git a/index.html b/index.html
index a66864d..47028db 100644
--- a/index.html
+++ b/index.html
@@ -1,2 +1,3 @@
 <h1>Gitチュートリアル</h1>
 <p>git status</p>
+<p>git diff</p>


すると「<p>git diff</p>」を追記したのが分かります。

この「--staged」というのはステージとコミットの間の変更差分を表示するコマンドです。


今ステージには「<p>git diff</p>」が追記された状態が記録されていて、まだコミットの方には「<p>git diff</p>」が記録されていないので、そこの変更分が表示されます。


ここでコミットしてみましょう。

「git commit -m 'git diffを追記'」と入力します。

$ git commit -m 'git diffを追記'
[master b8cf2f8] git diffを追記
 1 file changed, 1 insertion(+)


コミットできたことを確認したら、最後にもう一度「git diff」コマンドを実行しておきましょう。

$ git diff


いまワークツリーとステージの間には何の変更差分もないので何も表示されません。


では次に「git diff --staged」を実行します。

$ git diff --staged


こちらもコミットした後なので、ステージとコミットの間には何の変更分もありません。

そのため何も表示されません。


実際に開発する時は、このようにステージ追加する前やコミットする前に「git diff」コマンドを実行して、何の変更をしたかというのを確認してからステージに追加したり、コミットする癖を付けましょう。


参考図書



独学で挫折しそうになったら、オンラインプログラミングスクール
未来エンジニア養成所Logo



あわせて学習したい

phoeducation.work