122

から返された情報からデータを収集しています

git diff <commitId>..<commitId>

そして私は遭遇しました@@ -1 +1 @@

それが何を言っているのか理解できません。Googleで少し検索しましたが、役に立ちませんでした。

4

3 に答える 3

86

簡単な例の分析

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

例えば:

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

ここでは、行 2、3、14、および 15 を削除しました。出力:

@@ -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
    

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

ハンク ヘッダー

@@git のバージョンと構成によっては、行の隣にコード行を取得することもできますfunc1() {

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

-pこれは、plainのフラグでも取得できますdiff

例: 古いファイル:

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

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

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

これは の正しい行ではないことに注意してください: 行とfunc1をスキップしました。12

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

ヘッダーを選択するアルゴリズムが正確にどのように機能するかについては、次の場所で説明されています: git diff hunk ヘッダーの抜粋はどこから来たのですか?

于 2015-07-24T16:44:01.443 に答える
74

これは、統一された差分ハンク識別子です。これはGNU Diffutils によって文書化されています。

統一された出力形式は、次のような 2 行のヘッダーで始まります。

--- from-file from-file-modification-time 
+++ to-file to-file-modification-time

2002-02-21 23:30:39.942229878 -0800タイム スタンプは、日付、小数秒の時刻、およびタイム ゾーンを示すように見えます。端数のタイム スタンプをサポートしていないホストでは、端数の秒は省略されます。

--label=labelオプションでヘッダーの内容を変更できます。代替名を参照してください。

次に、1 つまたは複数の違いの塊が続きます。各ハンクは、ファイルが異なる 1 つの領域を示します。統一された形式のハンクは次のようになります。

@@ from-file-line-numbers to-file-line-numbers @@
  line-from-either-file 
 line-from-either-file ...

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

ハンクとそのコンテキストに 2 行以上が含まれる場合、その行番号は のようになります。それ以外の場合は、その終了行番号のみが表示されます。空のハンクは、ハンクの前の行で終了すると見なされます。start,count

両方のファイルに共通する行は、スペース文字で始まります。2 つのファイル間で実際に異なる行には、左側の印刷列に次の標識文字のいずれかがあります。

  • +
    最初のファイルにここに行が追加されました。
  • -
    最初のファイルからここで行が削除されました。
于 2012-06-08T14:11:04.537 に答える
6

これは、この差分ハンクが開始および終了する行番号を示す現在のハンク範囲情報です。

詳細な説明については、http://en.wikipedia.org/wiki/Diff#Unified_formatを参照してください。

于 2012-06-08T14:10:05.893 に答える