什么“@@ -1 +1 @@”在Git的diff输出中意味着什么?

时间:2012-06-08 14:06:43

标签: git diff

我一直在从

返回的信息中收集数据
git diff <commitId>..<commitId>

我遇到了@@ -1 +1 @@

我无法弄清楚那是什么告诉我的。我在Google上搜索了一下,但无济于事。

3 个答案:

答案 0 :(得分:63)

这是一个统一的差异标识符。这是GNU Diffutils的documented

  

统一输出格式以两行标题开头,如下所示:

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

时间戳看起来像2002-02-21 23:30:39.942229878 -0800,表示日期,小数秒的时间和时区。在不支持小数时间戳的主机上省略小数秒。

     

您可以使用--label=label选项更改标题的内容;请参阅Alternate Names

     

接下来会出现一个或多个差异;每个块显示文件不同的一个区域。统一格式的帅哥看起来像这样:

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

如果hunk只包含一行,则只显示其起始行号。否则,其行号看起来像start,count。一个空的大块被认为是从大块后面的一行开始的。

     

如果一个hunk及其上下文包含两行或更多行,则其行号看起来像start,count。否则只显示其结束行号。一个空的大块被认为是在大块之前的那一行结束。

     

两个文件共有的行以空格字符开头。两个文件之间实际不同的行在左侧打印列中具有以下指示符之一:

     
      
  • +
      这里添加了一行到第一个文件。
  •   
  • <强> -
      这里从第一个文件中删除了一行。
  •   

答案 1 :(得分:51)

简单的示例分析

格式与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行:

    01
    02
    03
    04
    05
    06
    

    -表示“旧”,因为我们通常将其称为diff -u old new

  • +1,4表示此部分对应于第二个文件的第1行到第4行。

    +表示“新”。

    我们只有4行代替6行,因为删除了2行!新的大块头只是:

    01
    04
    05
    06
    
第二个大块的

@@ -11,6 +9,4 @@类似:

    旧文件上的
  • ,我们有6行,从旧文件的第11行开始:

    11
    12
    13
    14
    15
    16
    
  • 在新文件中,我们有4行,从新文件的第9行开始:

    11
    12
    13
    16
    

    注意,行11是新文件的第9行,因为我们已经删除了前一个块上的2行:2和3。

Hunk标题

根据您的git版本和配置,您还可以获得@@行旁边的代码行,例如func1() { in:

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

这也可以通过普通-p的{​​{1}}标志获得。

示例:旧文件:

diff

如果我们删除行func1() { 1; 2; 3; 4; 5; 6; 7; 8; 9; } ,则差异显示:

6

请注意,这不是@@ -4,7 +4,6 @@ func1() { 3; 4; 5; - 6; 7; 8; 9; 的正确行:它跳过了行func11

这个很棒的功能通常可以准确地告诉每个hunk属于哪个函数或类,这对于解释差异非常有用。

如何精确选择标题的算法在Where does the excerpt in the git diff hunk header come from?

中讨论

答案 2 :(得分:6)

这是当前的大块范围信息,说明此差异块开始和结束的行号。

阅读http://en.wikipedia.org/wiki/Diff#Unified_format以获得深入的解释。