サイトアイコン ITC Media

【Git】diffコマンドの使い方|実例付きでわかりやすく解説

(最終更新日:2023年8月)

✔当記事は以下のような方に向けて書かれています

「git diffコマンドとは何か、何ができるのか?」
「git diffコマんどの正しい使い方を学びたい」
「git diffコマンドの具体的な例を見て理解したい」

✔当記事で解説する内容

当記事では、git diffコマンドの基礎から、高度な活用法まで、実際の使用例を交えて詳しく説明しています。

文書の最後まで十分にご覧いただくと、必要な情報が得られることでしょう。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

git diffを扱うための前提知識

ここでは、git diffを扱うために必要な知識をご覧いただきます。

Gitとは

Gitは、バージョン管理システムのひとつ。

複数人がひとつのプロジェクトに取り組む際に、誰が何を編集したかを把握し、複数のバージョンを効率的に管理できます。

さまざまな開発の現場で使用されていますので、必ず覚えておくべきツールといえるでしょう。

git diffとは

‘git diff’ は、ソースコードの過去のバージョンと現在のバージョンの違いを確認するために使われるコマンド

ソースコードの変更点を詳細に確認できるのが特徴のコマンドです。

どこにどのような変更が加えられたか、どの部分が削除または追加されたかを把握することが容易になります。

Git diffを使用するタイミング

ここでは、Git diffを使用するタイミングについてお伝えします。

リモート更新前にGit Diffを使用

リモートリポジトリを更新する前は、git diffを使うポイントです。

これにより、変更内容が期待通りであるか、予期せぬ変更が含まれていないかを確認できます。

ローカルリポジトリの変更点を確認するために 、git diff コマンドを使用しましょう。

Git Pushの前に変更点を確認する

Git Pushの前にも 、git diff コマンドを使用すべきといえるでしょう。

なぜならほかの開発者に影響を及ぼす可能性を、予め把握できるからです。

git pullの前に、変更内容を再確認します。

Git Add前と後の変更点の確認

git add コマンドの前後でも、git diff コマンドは有用です。

何をステージングすべきかを、正確に把握できます。

具体的には、以下のようなおプションも使い分けると良いでしょう。

コミット後の変更点の表示

コミット後に git diff コマンドを使用すると、最新のコミットと作業ディレクトリ間の差分が確認できます。

新たに追加または変更されたコードを素早く把握できるのです。

コミット間の比較

git diff コマンドは、2つのコミット間の差分を表示するためにも使用可能

この機能は、特定のコミットでおこなわれた変更内容を確認する際や、バグの原因を追求する際などに非常に役立ちます。

ブランチ間の差分確認

異なるブランチ間の差分を確認する場合も、git diff コマンドを使用します。

ひとつのブランチに存在する機能が別のブランチにも反映されているかを確認したり、ブランチ間で発生しているコンフリクトを特定したりするのに役立つからです。

特定の変更点を見つけるためのGit diff

ここでは、「特定の変更点を見つけるためのGit diff」についてお伝えしていきます。

特定のコミットの変更内容の確認

git diff コマンドで、特定のコミットにおける変更内容を確認できます。

過去におこなった修正や、バグの原因を特定するのに必要だからです。

コミットIDを使用して、そのコミットでおこなわれた変更を表示してください。

ファイルごとの変更確認

特定のファイルに対する変更を調べるために、 git diff コマンドが使用できます。

そのファイル内で何が変わったのかを把握したいときに使う方法です。

ファイル間の差分検出

git diff コマンドは2つの異なるファイル間での差分も確認できます。

異なるバージョンのファイルや、同じファイルの異なるブランチ間での違いを確認する際に有用です。

変更規模の確認

git diff コマンドは、変更の規模を理解するのにも役立ちます。

どのファイルに最も多くの変更が加えられたのか、コード全体でどのくらいの変更があったのかを把握できるからです。

プロジェクトの変更を評価して、その影響を理解するうえで重要です。

変更ファイル名の表示

git diff コマンドを使用すれば、変更されたファイル名を表示できます。

とくに大きなプロジェクトで、どのファイルが変更されたのかを素早く把握したい場合に便利です。

git diffの詳細設定

ここでは、「Git Diffの詳細設定」についてお伝えしていきます。

改行や空白を無視する設定

改行や空白を無視する設定を覚えておきましょう。

なぜならコードの実質的な変更でもないのに関わらず、改行や空白の変更だけで大量の差分が出てしまうことがあるからです。

そのような場合には、git diff コマンドの -w オプションを使用しましょう。

このオプションを付けると、git diff は改行や空白の変更を無視し、実質的なコードの変更のみを表示します。

$ git diff -w

空行無視の設定

空行の追加や削除を無視する方法もあります。

大きく問題とならないようであれば、改行や空白と合わせて設定することがおすすめです。

git diff -B

空行の追加や削除を無視し、他の重要なコードの変更だけを表示します。

変更箇所の表示行数の設定

変更箇所の周囲にあるコードを何行表示するかを指定できます。

デフォルトでは、変更箇所の周囲数行も一緒に表示されますが、ときにはこれが多すぎる、あるいは少なすぎると感じることもあるでしょう。

-U オプションを使用して、表示する行数を自分で指定可能です。

git diff -U5

変更箇所の前後5行が表示されます。

基本的な使用法と応用例

ここでは、「基本的な使用法と応用例」についてお伝えしていきます。

Git diffの基本的なコマンドライン使い方

基本的なgit diffの使用方法は非常に直感的で、特定のファイルの変更を追跡したり、2つのコミット間の差分を比較したりが可能です。

基本的な形式はこちら。

git diff <コミットID1>..<コミットID2>

これを使用すると、2つのコミット間で何が変わったのかを確認できます。

$ git diff b7d893d..f3a2b47

単語単位での差分表示

git diffコマンドは、行単位だけでなく単語単位での変更も追跡可能です。

--word-diffオプションを使ってください。

行内の単語レベルでの変更を視覚的に理解できます。

$ git diff --word-diff 8273bc5..e92f6f4
diff --git a/sentence.txt b/sentence.txt
index c6bbf50..f8b0d2e 100644
--- a/sentence.txt
+++ b/sentence.txt
@@ -1 +1 @@
The [-quick-]{+A+} brown fox jumps over the lazy dog.

Excelや圧縮JavaScriptファイルの比較

git diffコマンドでは、特定の設定やツールを用いることで、Excelのようなバイナリファイルや圧縮されたJavaScriptファイルの差分を確認することも可能です。

専用の差分表示ツールやプラグインを利用する例をご覧ください。

Excelファイルの差分を確認する

Excelファイルはバイナリ形式であるため、通常のgit diffではわかりやすい結果が得られません。

専用の差分表示ツールであるgit difftoolを使用しましょう。

git difftoolを使う手順の一例です。

まず、差分表示ツールとしてmeldをインストールします(meldはLinux環境での例)。

$ sudo apt-get install meld

次に、git difftoolのデフォルトツールとしてmeldを設定します。

$ git config --global diff.tool meld

これでgit difftoolコマンドが利用できるようになります。以下のコマンドで差分を確認できます。

$ git difftool <コミットID1> <コミットID2> path/to/excel_file.xlsx

圧縮されたJavaScriptファイルの差分を確認する

JavaScriptファイルが圧縮されている場合、通常のgit diffコマンドでは理解しにくい結果になります。

専用の差分表示ツールやプラグインを使用しましょう。

例えば、diff-so-fancyというプラグインは、圧縮されたJavaScriptファイルなどの差分を見やすく表示できます。

以下はそのインストールと使用例です。

# diff-so-fancyのインストール
$ npm install -g diff-so-fancy

# gitの設定にdiff-so-fancyを追加
$ git config --global core.pager "diff-so-fancy | less --tabs=4 -RFX"

# git diffコマンドで圧縮されたJavaScriptファイルの差分を確認
$ git diff <コミットID1> <コミットID2> path/to/compressed_js_file.js

diff-so-fancyを使って圧縮されたJavaScriptファイルの差分を見やすく表示できます。

Git Diffのエラーとその解決策

git diffの使用中にエラーが発生することがあります。

fatal: ambiguous argument 'master..feature': unknown revision or path not in the working tree.

比較しようとしているブランチが存在しないか、チェックアウトしていないことを示しています。

このような問題は、適切なブランチにチェックアウトするか、存在するブランチ名を正しく入力することで解決できるでしょう。

FAQ:よくある質問

git diffについて、よくある質問をまとめました。

事前に確認しておけば、トラブル時の解決が早まるでしょう。

git diffとgit diff --stagedの違いは何ですか?

git diffはワーキングディレクトリ(作業中の変更)とステージングエリア(次のコミットでコミットされる変更)間の差分を表示します。

一方、git diff --stagedはステージングエリアと最後のコミット間の差分を表示するものです。

特定のファイルの変更だけを追跡する方法はありますか?

はい、git diffを使用するときに特定のファイル名を指定することで、そのファイルのみの変更を追跡可能です。

例えば、git diff README.mdというコマンドを使用すると、README.mdファイルの変更だけを表示できます。

変更点を色分け表示するにはどうすればいいですか?

git diffの結果はデフォルトで色分けされて表示されますが、何らかの理由で色が表示されない場合は、Gitの設定で色を有効にできます。

これはgit config --global color.ui autoというコマンドを実行することで設定できます。

git diffが巨大なファイルに対して非常に遅いです。これを高速化する方法はありますか?

git diffは大きなファイルや多数のファイルに対して遅くなる可能性があります。

これを改善するためには、特定のファイルやディレクトリのみを対象にする、あるいはgit diff --diff-filterオプションを使用して特定の種類の変更だけを表示するなどの方法があります。

まとめ

当記事で見てきたように、git diffは非常に強力で多機能なツールです。

コードの変更を追跡・異なるコミット間やブランチ間の差分を比較するための、基本的な使用法から、より詳細な設定まで、多くの機能が存在します。

これらの機能を理解し、適切に使用することで、ソフトウェア開発の効率と品質を大幅に向上できるでしょう。

またgit diffを最大限に活用するためには、次のようなヒントとコツを覚えておくと便利です。

いろいろと試しながら、gitの知識をマスターしましょう。

モバイルバージョンを終了