git diffの使い方|差分確認の基本とシステム開発で使えるオプションまとめ

Git

git diffは、作業中の変更内容やコミット間の差分を確認できるGitのコマンドです。

システム開発においても、コミット前の修正内容の確認のほか、
レビュー前のチェックなど、さまざまな場面で使用されます。

本記事では、git diffの基本的な使い方に加え、
作業中・ステージング後・コミット後などの差分確認方法や、
そのほか知っていると実務で役に立つオプションについて整理しています。

git diff でできること

作業中やステージング済みの変更、コミット間における変更差分を確認するコマンドです。
用途に応じてオプションを使い分けます。

【よく使う場面】

  • 修正内容の確認(意図しない変更内容の検出)
  • コミット前、push前の内容確認

git diff の基本の使い方

全ファイルの変更内容の確認

作業ブランチ内における、全ファイルの変更内容が確認できます。

【使用例】

$ git diff
diff --git a/sample.txt b/sample.txt
index e69de29..a1b2c3d 100644
--- a/sample.txt
+++ b/sample.txt
@@ -0,0 +1,2 @@
+追加行1
+追加行2

任意のファイルの変更内容を確認

任意のファイルだけの変更差分を確認できます。

【使用例】

$ git diff <ファイル名>
$ git diff sample.txt
diff --git a/sample.txt b/sample.txt
index a1b2c3d..d4e5f6g 100644
--- a/sample.txt
+++ b/sample.txt
@@ -1 +1,2 @@
-元の行
+元の行
+追加行

ステージング(git add)済みファイルの変更内容の確認

git add でステージングしたファイルの変更差分を確認します。

【使用例】

$ git diff --cached
diff --git a/sample.txt b/sample.txt
index e69de29..f4g5h6i 100644
--- a/sample.txt
+++ b/sample.txt
@@ -0,0 +1,1 @@
+追加行1
+追加行2

コミットやブランチ間の差分確認

コミット間における変更差分の確認

指定した2つのコミット間における変更差分を確認できます。
コミットのSHA値は、git log コマンドで確認できます。

【使用例】

$ git diff <コミットSHA値1> <コミットSHA値2>
$ git diff a1b2c3d d4e5f6g
diff --git a/sample.txt b/sample.txt
index a1b2c3d..d4e5f6g 100644
--- a/sample.txt
+++ b/sample.txt
@@ -1 +1,2 @@
-古い行
+新しい行
+追加行

以下のように「^」を付与すると、指定したコミットの1つ前のコミットとの変更差分を確認できます。
※「^」を二つ三つと増やすことで、2つ前3つ前…のコミットとの変更差分も確認できます。

$ git diff <コミットSHA値1>^ <コミットSHA値1>
$ git diff a1b2c3d^ a1b2c3d
diff --git a/sample.txt b/sample.txt
index 0000000..a1b2c3d 100644
--- a/sample.txt
+++ b/sample.txt
@@ -0,0 +1 @@
+新規追加行

システム開発で便利なオプション

ファイル毎の変更量の確認

変更内容ではなく、ファイル毎の変更行数を確認できます。

大量のファイルを更新する際、変更予定のないファイルに意図しない変更が含まれていないかなどを、
パッと確認したいときに便利なオプションです。

【使用例】

$ git diff --stat
 sample.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

ヒストグラム方式による差分表示

差分検出の方法をヒストグラム方式に変更するオプションです。

通常の git diff では、Myers方式と呼ばれるアルゴリズムにより差分検出が行われますが、
これをヒストグラム方式と呼ばれる別のアルゴリズムで行います。
行の追加・削除やファイルの入れ替えが多い場合、Myers方式よりも差分が見やすいことがあります。

【使用例】

$ git diff <コミットSHA値1> <コミットSHA値2> --histogram
$ git diff a1b2c3d d4e5f6g --histogram
diff --git a/sample.txt b/sample.txt
index a1b2c3d..d4e5f6g 100644
--- a/sample.txt
+++ b/sample.txt
@@ -1 +1,2 @@
-古い行
+新しい行
+追加行

差分を関数(メソッド)単位で表示

変更差分を関数(メソッド)単位のまとまりで表示するオプションです。
差分箇所の前後も含めて表示されるため、処理の流れと合わせて修正内容を確認したい場合に便利です。

【使用例】

$ git diff <コミットSHA値1> <コミットSHA値2> -W
$ git diff a1b2c3d d4e5f6g -W
diff --git a/main.c b/main.c
index a1b2c3d..d4e5f6g 100644
--- a/main.c
+++ b/main.c
@@ -10,6 +10,8 @@ void example() {
-    int x = 0;
+    int x = 1;
+    printf("追加処理\n");
 }

まとめ

git diffは、作業中やステージング済みの変更、コミット間における変更差分を確認できるコマンドです。

オプションを使い分けることで、差分の出力形式を変えることもできるため、
状況に応じて効率よく変更差分を確認できます。

また、git diff以外のコマンドについては、次の記事でまとめています。
システム開発でよく使うGitコマンド完全ガイド(基本~応用まで)

参考リンク

Git公式ドキュメント(git diff):https://git-scm.com/docs/git-diff

コメント