Unified Diffの@@Hunkヘッダーを理解する

Unified Diff形式の@@Hunkヘッダーを詳しく解説。行番号とカウントの仕組み、パッチ適用における意味を学びます。

Unified Diff Format

詳細な説明

Hunkヘッダーの構造

Unified Diffの各変更セクションはHunkヘッダーで始まります:@@ -oldStart,oldCount +newStart,newCount @@。このヘッダーはパッチエンジンに変更を適用する正確な位置を伝えます。

ヘッダーフォーマット

@@ -10,8 +10,12 @@ オプションの関数コンテキスト
コンポーネント 意味
-10,8 オリジナルファイルでこのHunkは10行目から始まり8行にわたる
+10,12 新しいファイルでこのHunkは10行目から始まり12行にわたる
オプションテキスト 一部のツールは読みやすさのために最寄りの関数/クラス名を付加

カウントルール

カウントはそれぞれの側のHunkボディ内のすべての行を含みます:

  • コンテキスト行( )は旧カウントと新カウントの両方に算入
  • 削除行(-)は旧カウントのみに算入
  • 追加行(+)は新カウントのみに算入

検証例

@@ -5,6 +5,8 @@
 コンテキスト行          (旧: 1, 新: 1)
 コンテキスト行          (旧: 2, 新: 2)
-削除行                  (旧: 3)
-削除行                  (旧: 4)
+追加行                  (新: 3)
+追加行                  (新: 4)
+追加行                  (新: 5)
+追加行                  (新: 6)
 コンテキスト行          (旧: 5, 新: 7)
 コンテキスト行          (旧: 6, 新: 8)

旧カウント:コンテキスト2 + 削除2 + コンテキスト2 = 6。新カウント:コンテキスト2 + 追加4 + コンテキスト2 = 8

1行の省略記法

カウントが1の場合は省略可能:@@ -5 +5,2 @@は旧側が5行目から1行、新側が5行目から2行を意味します。

ユースケース

パッチの適用に失敗する原因をデバッグしています。Hunkヘッダーを理解することで、特にパッチファイルを手動編集した後の行番号とカウントが正しいか検証できます。

試してみる — Diff Patch Applier

フルツールを開く