Git の diff 出力における「@@ -1 +1 @@」はどういう意味ですか? 質問する

Git の diff 出力における「@@ -1 +1 @@」はどういう意味ですか? 質問する

私は返された情報からデータを収集してきました

git diff <commitId>..<commitId>

そして私は出会った@@ -1 +1 @@

それが何を意味するのか分かりません。Google で少し検索してみましたが、何も見つかりません。

ベストアンサー1

簡単な例の分析

形式は基本的にdiff -u統合 diff と同じです。

たとえば次のことを考えてみましょう:

diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')

どこ:

  • 最初のファイルには0102から16
  • 2番目のファイルには同じ内容が含まれていますが、行02、、が削除されています031415

差分出力:

@@ -1,6 +1,4 @@
 01
-02
-03
 04
 05
 06
@@ -11,6 +9,4 @@
 11
 12
 13
-14
-15
 16

@@ -1,6 +1,4 @@手段:

  • -1,6これは、最初のファイルのこの部分が 1 行目から始まり、合計 6 行を示すことを意味します。したがって、1 行目から 6 行目までが表示されます。

    1
    2
    3
    4
    5
    6
    

    -は「古い」という意味で、通常は と呼ばれますdiff -u old new

  • +1,4は、2 番目のファイルのこの部分が 1 行目から始まり、合計 4 行を表示することを意味します。したがって、1 行目から 4 行目までが表示されます。

    +「新しい」という意味です。

    2 行が削除されたため、6 行ではなく 4 行だけになりました。新しいハンクは次のようになります。

    01
    04
    05
    06
    

@@ -11,6 +9,4 @@2番目の塊も同様です。

  • 古いファイルには、古いファイルの 11 行目から始まる 6 行があります。

    11
    12
    13
    14
    15
    16
    
  • 新しいファイルには、新しいファイルの 9 行目から始まる 4 行があります。

    11
    12
    13
    16
    

    前のハンクで 2 行目と 3 行目をすでに削除しているため、この行は11新しいファイルの 9 行目であることに注意してください。

ハンクヘッダー

@@Git のバージョンと設定によっては、次の例のように、行の横にコード行が表示されることもありますfunc1() {

@@ -4,7 +4,6 @@ func1() {

-pこれはプレーンのフラグでも取得できますdiff

例: 古いファイル:

func1() {
    1;
    2;
    3;
    4;
    5;
    6;
    7;
    8;
    9;
}

行を削除すると6、 diff は次のようになります。

@@ -4,7 +4,6 @@ func1() {
     3;
     4;
     5;
-    6;
     7;
     8;
     9;

これは の正しい行ではないことに注意してくださいfunc1。行1とがスキップされています2

この素晴らしい機能は、多くの場合、各ハンクがどの関数またはクラスに属しているかを正確に示し、差分を解釈するのに非常に役立ちます。

ヘッダーを選択するアルゴリズムがどのように機能するかについては、以下で詳しく説明されています。git diff hunk ヘッダーの抜粋はどこから来ているのでしょうか?

1行の要約表記

これは非常にまれですが、次の点を考慮してください。

diff -U0 <(seq -w 16) <(seq -w 16 | sed 's/10/hack/')

どこ:

  • -U0: 0行のコンテキストを使用する
  • 2番目のファイル10hack

その場合の diff 出力は次のようになります。

@@ -10 +10 @@
-10
+hack

したがって、1 行の変更がある場合、表記はペアではなく 1 つの数値のみを表示するように要約されることがわかりますm,n

この動作は、引用された文書に記載されています。トッドの答え:

ハンクに 1 行だけ含まれている場合は、開始行番号のみが表示されます。それ以外の場合、行番号は start,count のようになります。空のハンクは、ハンクに続く行から始まるとみなされます。

単一行のハンクの追加と削除は次のようになります。削除:

diff -U0  <(seq -w 16) <(seq -w 16 | grep -Ev '^(10)$')

出力:

@@ -10 +9,0 @@
-10

追加:

$ diff -U0 <(seq -w 16 | grep -Ev '^(10)$') <(seq -w 16)

出力:

@@ -9,0 +10 @@
+10

diff 3.8、Ubuntu 22.10 でテスト済み。

おすすめ記事