git diff 结果分析

时间:2023-03-09 18:02:24
git diff 结果分析

git diff 的5个使用场景:

1.staging area和working area的文件 (无其他参数时)

git diff  

2.master分支和working area的文件 (用master参数)

git diff master 

3.HEAD指向的内容和working area的文件

git diff HEAD 

4.用远程master分支比较当前工作区

git diff refs/remotes/origin/master 

5.经常还要用到master分支的某个文件的历史版本和working area的该文件的比较

git diff 0c5ee16a6a4c849d0ae0448caa8ff174399c7c3c ./socket_helper.cpp 

6.两个分支之间的比较( testbr 分支与 master 分支比较)

git diff master testbr

如果只比较两个分支的指定文件,就在上面的语句后面加上文件路径

7 历史记录之间对比

git diff HEAD  HEAD^
git diff HEAD HEAD^^
git diff 数列号6位即可 数列号6位即可

上面的命令中, diff后面的参数指的是commit id, ./socket_helper.cpp是要比较的文件路径。


diff的命令输出格式注意:

---代表源文件  
+++代表目标文件  

通常working area的文件都是被当作目标文件来看待。

-开头的行,是只出现在源文件中的行

+开头的行,是只出现在目标文件中的行

空格开头的行,是源文件和目标文件中都出现的行

-差异按照差异小结进行组织,每个差异小结的第一行都是定位语句,由@@开头,@@结尾。


示例分析

staging area 区中的README.md内容如下:

one line
two line
three line 'there are three line is common part'
four line 'only in staging area'

working area 区中的README.md内容如下:

one line
two line
three line 'there are three line is common part'
four line 'only in working area'

执行 git diff 命令结果如图

git diff 结果分析

上面的diff结果表明

1.暂存区的README.md文件是源文件,当前working area的README.md文件是目标文件。

2.在源文件第1行到其后的第6行和目标文件第1行开始到其后的第7行构成一个差异小结

3.这个差异小结中,目标文件删除了一行 four line 'only in staging area'

添加了一行 four line 'only in working area'

4.前3行空格开头表明没有差异。


示例2,分支之间的比较

git diff 结果分析

1,master 分支的README.md 是源文件,testbr 的README.md 是目标文件。

2,源文件是从第2行开始,到其后的4行,目标文件是第2行开始到其后的5行

3,前3行相同,源文件第四行是master ,目标文件第四五行是add line ,testbr