撒科打诨
@@ -1,2 +3,4 @@ 差异的一部分这部分花了我一些时间来理解,因此我创建了一个最小的示例。格式与diff -u统一差异基本相同。例如:diff -u <(seq 16) <(seq 16 | grep -Ev '^(2|3|14|15)$')在这里,我们删除了第2、3、14和15行。输出:@@ -1,6 +1,4 @@ 1-2-3 4 5 6@@ -11,6 +9,4 @@ 11 12 13-14-15 16@@ -1,6 +1,4 @@ 手段:-1,6表示第一个文件的这一部分从第1行开始,总共显示6行。因此,它显示第1至6行。123456-表示“旧”,因为我们通常将其称为diff -u old new。+1,4表示第二个文件的这一部分从第1行开始,总共显示4行。因此,它显示第1至4行。+ 表示“新”。我们只有4行而不是6行,因为删除了2行!新的大块头就是:1456@@ -11,6 +9,4 @@ 第二个大块是类似的:在旧文件上,我们有6行,从旧文件的第11行开始:111213141516在新文件上,我们有4行,从新文件的第9行开始:11121316请注意,该行11是新文件的第9行,因为我们已经删除了前一个大块的2行:2和3。大块头根据您的git版本和配置,您还可以在该行旁边获得一个代码@@行,例如func1() {in:@@ -4,7 +4,6 @@ func1() {也可以使用-pplain标志获得diff。示例:旧文件:func1() { 1; 2; 3; 4; 5; 6; 7; 8; 9;}如果我们删除line 6,则差异显示:@@ -4,7 +4,6 @@ func1() { 3; 4; 5;- 6; 7; 8; 9;请注意,这不是正确的行func1:它跳过了行1和2。这个很棒的功能通常会准确告诉每个块属于哪个函数或类,这对于解释差异非常有用。
人到中年有点甜
这是简单的例子。diff --git a/file b/file index 10ff2df..84d4fa2 100644--- a/file+++ b/file@@ -1,5 +1,5 @@ line1 line2-this line will be deleted line4 line5+this line is added这是一个解释(在此处查看详细信息)。--git 不是命令,这意味着它是diff的git版本(不是unix)a/ b/是目录,它们不是真实的。当我们处理相同的文件时,这只是一种方便(在我的情况下,a /在索引中,而b /在工作目录中)10ff2df..84d4fa2 是这2个文件的Blob ID100644 是“模式位”,表示这是一个常规文件(不是可执行文件,不是符号链接)--- a/file +++ b/file减号显示a /版本中的行,但b /版本中缺少行;加号显示a /中缺少的行,但b /中存在(在我的情况下---表示已删除的行,+++表示b /中已添加的行,并且这是工作目录中的文件)@@ -1,5 +1,5 @@为了理解这一点,最好使用大文件;如果您在不同的地方进行了两次更改,您将得到两个条目@@ -1,5 +1,5 @@; 假设您有文件line1 ... line100,并删除了line10并添加了新的line100-您将获得:@@ -7,7 +7,6 @@ line6 line7 line8 line9-this line10 to be deleted line11 line12 line13@@ -98,3 +97,4 @@ line97 line98 line99 line100+this is new line100