Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

diff / patch

『diff』は2つのファイルやディレクトリの差分を比較するコマンドです。『patch』は『diff』が出力した差分ファイル(パッチファイル)をファイルに適用します。バージョン管理やソフトウェアの更新に使われます。

構文
diff [オプション] ファイル1 ファイル2
patch [オプション] [元ファイル] [パッチファイル]
オプション一覧
コマンド / オプション概要
diff ファイル1 ファイル22ファイルの差分を表示します。「<」がファイル1、「>」がファイル2の行です。
diff -u ファイル1 ファイル2ユニファイド形式(unified)で差分を表示します。git diff と同じ見た目です。
diff -r ディレクトリ1 ディレクトリ2ディレクトリを再帰的に比較します。
diff -i ファイル1 ファイル2大文字小文字を無視して比較します。
diff -b ファイル1 ファイル2空白の数の違いを無視して比較します。
diff -q ファイル1 ファイル2差分があるかどうかだけを表示します(内容は表示しません)。
diff -y ファイル1 ファイル22カラム並べて比較します。
patch ファイル < パッチパッチファイルの差分をファイルに適用します。
patch -R ファイル < パッチパッチを逆適用します(変更を元に戻します)。
patch -p1 < パッチパッチファイルのパスから先頭1段のディレクトリ名を取り除いて適用します。
サンプルコード

以下のファイルを例に説明します。

# original.txt の内容:
# line1
# line2
# line3

# modified.txt の内容:
# line1
# line2 modified
# line3
# line4 added

『diff -u』でユニファイド形式(git diff と同じ見た目)の差分を表示します。

diff -u original.txt modified.txt
--- original.txt	2026-03-05 10:00:00.000000000 +0900
+++ modified.txt	2026-03-05 10:01:00.000000000 +0900
@@ -1,3 +1,4 @@
 line1
-line2
+line2 modified
 line3
+line4 added

差分をパッチファイルとして保存します。

diff -u original.txt modified.txt > changes.patch

パッチファイルを適用します。

patch original.txt < changes.patch
patching file original.txt

『-R』でパッチを逆適用して変更前に戻します。

patch -R original.txt < changes.patch
patching file original.txt

『-q』で差分の有無だけを確認します(スクリプトでの判定に使います)。

diff -q original.txt modified.txt
Files original.txt and modified.txt differ

『-r』でディレクトリを再帰的に比較します。

diff -r dir1/ dir2/
diff -r dir1/config.txt dir2/config.txt
1c1
< debug=false
---
> debug=true
Only in dir2/: newfile.txt

『-y』で2カラム並べて比較します。

diff -y original.txt modified.txt
line1                 line1
line2               | line2 modified
line3                 line3
                    > line4 added
概要

ユニファイド形式(-u)の出力は「-」が削除された行、「+」が追加された行です。git が内部で使う差分形式と同じです。現代のソフトウェア開発では diff/patch を直接使うことは少なく、git が内包するため意識せずに使っています。ただしサーバー上でのパッチ適用やコードレビューツールの出力を理解するために読める必要があります。

ファイルを比較してコピーする際は『cp』も参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。