開発 へ戻る
diff / patch — Unified diff の生成・適用

diff / patch — Unified diff の生成・適用

2 つのテキストから Unified diff (.patch / .diff) を生成し、Unified diff を元テキストに適用 (apply) できる。Git や GNU patch と同形式 (--- / +++ / @@ ハンク)、コンテキスト行数とファイル名を指定可。すべてブラウザ内で処理。

開発テキストDiff

使い方

モードを「差分を生成」「パッチを適用」から選びます。差分を生成では、変更前 / 変更後の 2 つのテキストを貼り付けると、Git や GNU patch と互換の Unified diff (--- / +++ / @@ ハンク) が出力されます。ファイル名とコンテキスト行数 (前後に残す共通行) を調整可能です。パッチを適用では、元のテキストと Unified diff を貼り付けると、適用後のテキストが復元されます。元テキストが diff のベースと一致しない場合はエラーになり、text-diff で比較する CTA が表示されます。サンプルボタンでモードごとの例を読み込めます。

よくある質問

テキストはサーバーに送信されますか?
いいえ。差分の生成 (jsdiff の createPatch) と適用 (applyPatch) はすべてブラウザ内で実行されます。入力テキストや patch が外部に送信されることはありません。
出力形式は Git や GNU patch と互換?
はい。Unified diff 形式 (--- a/file / +++ b/file / @@ -L,C +L,C @@) で出力するので、`git apply patch.diff` や `patch -p1 < patch.diff` がそのまま使えます。先頭の `Index:` 行や区切り `=` は jsdiff の規定どおり付与されますが、Git / GNU patch はこれらを無視するので互換性に問題ありません。
コンテキスト行数とは何ですか?
差分の上下に表示される共通行 (変更されていない行) の数です。デフォルトは 3 行で、Git diff と同じ既定値です。0 にすると最小サイズの patch、増やすと patch が読みやすくなり、ファジー適用の成功率も上がります。
適用 (apply) でエラーになる場合は?
元のテキストが diff のベースと一致しない場合、jsdiff は false を返します (例外を投げない)。本ツールはこれを検出してエラー表示し、text-diff へ誘導する CTA を出します。ファジー一致 (前後行のずれ吸収) は jsdiff の規定で許容されるので、軽微なズレなら適用は通ります。
複数ファイルの patch (multi-hunk) は?
1 つの diff に複数のハンク (@@) を含めることはできますが、本ツールでは 1 ファイル分の Unified diff だけを扱います (file-by-file の `Index:` 区切りには非対応)。複数ファイルをまとめて適用したい場合は、本ツールで 1 ファイルずつ適用するか、CLI の `git apply` / `patch` を使ってください。
バイナリは比較できる?
いいえ。Unified diff はテキスト前提なので、非テキストファイルは予期しない動作になります。
text-diff との違いは?
text-diff は「比較を画面に表示する」(行内ワード差分、Inline / Side-by-Side) のがゴール。diff-patch は「patch テキストを生成 / 適用する」が目的で、Git や GNU patch との連携を前提にしています。レビューで差分を確認したいだけなら text-diff、CI / メール / コードレビューで patch を共有・適用したいなら diff-patch を使ってください。

類似のツール