我一直在从返回的信息中收集数据
git diff <commitId>..<commitId>
Run Code Online (Sandbox Code Playgroud)
然后我遇到了 @@ -1 +1 @@
我无法弄清楚那是什么告诉我的.我在Google上搜索了一下,但无济于事.
Tod*_*obs 64
这是一个统一的差异标识符.这是记录由GNU diffutils的.
统一输出格式以两行标题开头,如下所示:
--- from-file from-file-modification-time +++ to-file to-file-modification-time时间戳看起来像是
2002-02-21 23:30:39.942229878 -0800指示日期,小数秒的时间和时区.在不支持小数时间戳的主机上省略小数秒.您可以使用
--label=label选项更改标题的内容; 请参阅替代名称.接下来是一个或多个差异; 每个块显示文件不同的一个区域.统一格式帅哥看起来像这样:
@@ from-file-line-numbers to-file-line-numbers @@ line-from-either-file line-from-either-file...如果块只包含一行,则只显示其起始行号.否则它的行号看起来像.一个空的大块被认为是从大块后面的一行开始的.
start,count如果块和其上下文包含两行或更多行,则其行号看起来像.否则只显示其结束行号.一个空的大块被认为是在大块之前的行结束.
start,count两个文件共有的行以空格字符开头.两个文件之间实际不同的行在左侧打印列中具有以下指示符之一:
- +
这里添加了一行到第一个文件.- -
此处从第一个文件中删除了一行.
Cir*_*四事件 57
简单的例子分析
diff -u统一差异的格式基本相同.
例如:
diff -u <(seq -w 16) <(seq -w 16 | grep -Ev '^(02|03|14|15)$')
Run Code Online (Sandbox Code Playgroud)
这里我们删除了第2,3,14和15行.输出:
@@ -1,6 +1,4 @@
01
-02
-03
04
05
06
@@ -11,6 +9,4 @@
11
12
13
-14
-15
16
Run Code Online (Sandbox Code Playgroud)
@@ -1,6 +1,4 @@ 手段:
-1,6:此部分对应于第一个文件的第1行到第6行:
1
2
3
4
5
6
Run Code Online (Sandbox Code Playgroud)
-意思是"旧",因为我们通常称之为diff -u old new.
+1,4 说这件作品对应第二档的第1到第4行.
+ 意思是"新".
我们只有4行代替6行,因为删除了2行!新的大块头只是:
01
04
05
06
Run Code Online (Sandbox Code Playgroud)@@ -11,6 +9,4 @@ 对于第二个大块是类似的:
在旧文件中,我们有6行,从旧文件的第11行开始:
11
12
13
14
15
16
Run Code Online (Sandbox Code Playgroud)在新文件中,我们有4行,从新文件的第9行开始:
11
12
13
16
Run Code Online (Sandbox Code Playgroud)
请注意,该行11是新文件的第9行,因为我们已经删除了前一个块上的2行:2和3.
Hunk标头
根据您的git版本和配置,您还可以在该行旁边获取代码@@行,例如func1() {:
@@ -4,7 +4,6 @@ func1() {
Run Code Online (Sandbox Code Playgroud)
这也可以通过-pplain 的旗帜获得diff.
示例:旧文件:
func1() {
1;
2;
3;
4;
5;
6;
7;
8;
9;
}
Run Code Online (Sandbox Code Playgroud)
如果我们删除行6,diff会显示:
@@ -4,7 +4,6 @@ func1() {
3;
4;
5;
- 6;
7;
8;
9;
Run Code Online (Sandbox Code Playgroud)
请注意,这不是正确的行func1:它跳过行1和2.
这个很棒的功能通常可以准确地告诉每个hunk属于哪个函数或类,这对于解释diff非常有用.
选择标题的算法如何正常工作在下面讨论:git diff hunk标题中的摘录来自哪里?
| 归档时间: |
|
| 查看次数: |
24696 次 |
| 最近记录: |