如何从git diff读取输出?

的手册页git-diff相当长,其中介绍了许多初学者似乎不需要的情况。例如:


git diff origin/master


隔江千里
浏览 893回答 3
3回答

撒科打诨

@@ -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 @@&nbsp;1-2-3&nbsp;4&nbsp;5&nbsp;6@@ -11,6 +9,4 @@&nbsp;11&nbsp;12&nbsp;13-14-15&nbsp;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() {&nbsp; &nbsp; 1;&nbsp; &nbsp; 2;&nbsp; &nbsp; 3;&nbsp; &nbsp; 4;&nbsp; &nbsp; 5;&nbsp; &nbsp; 6;&nbsp; &nbsp; 7;&nbsp; &nbsp; 8;&nbsp; &nbsp; 9;}如果我们删除line 6,则差异显示:@@ -4,7 +4,6 @@ func1() {&nbsp; &nbsp; &nbsp;3;&nbsp; &nbsp; &nbsp;4;&nbsp; &nbsp; &nbsp;5;-&nbsp; &nbsp; 6;&nbsp; &nbsp; &nbsp;7;&nbsp; &nbsp; &nbsp;8;&nbsp; &nbsp; &nbsp;9;请注意,这不是正确的行func1:它跳过了行1和2。这个很棒的功能通常会准确告诉每个块属于哪个函数或类,这对于解释差异非常有用。

人到中年有点甜

这是简单的例子。diff --git a/file b/file&nbsp;index 10ff2df..84d4fa2 100644--- a/file+++ b/file@@ -1,5 +1,5 @@&nbsp;line1&nbsp;line2-this line will be deleted&nbsp;line4&nbsp;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&nbsp;line7&nbsp;line8&nbsp;line9-this line10 to be deleted&nbsp;line11&nbsp;line12&nbsp;line13@@ -98,3 +97,4 @@ line97&nbsp;line98&nbsp;line99&nbsp;line100+this is new line100
打开App,查看更多内容
随时随地看视频慕课网APP