从实用角度出发看懂和使用diff、git diff的合并格式

diff 合并格式

读懂diff - 阮一峰的网络日志 (ruanyifeng.com) diff 的用法有很多,默认的格式有三种,这不是本文的重点。本文将详细介绍Git中默认的合并格式的diff用法。

概述

本片文章将会从实战的角度出发,从用户的实际使用的角度出发,学习如何读懂和使用diff的合并格式。不建议用户去使用和学习diff其他格式。diff 合并格式是git以及GitHub的默认显示格式。

格式

我们知道diff 有三个格式,读懂diff - 阮一峰的网络日志 (ruanyifeng.com) 有详细的说明,这里不再重复。

合并格式(unified diff)

本文重点描述的了diff的合并格式,用户并不需要学习其他格式,因为过去的格式不好用才发展处今天的合并格式。

合并格式的diff

diff -u 文件1 文件2  #-u 表示unified 使用合并格式

如果两个文件相似度很高,那么上下文格式的diff,将显示大量重复的内容,很浪费空间。1990年,GNU diff率先推出了"合并格式"的diff,将f1和f2的上下文合并在一起显示。

它的使用方法是加入u参数(代表unified)。

  $ diff -u f1 f2

显示结果如下:

  --- f1 2012-08-29 16:45:41.000000000 +0800   +++ f2 2012-08-29 16:45:51.000000000 +0800   @@ -1,7 +1,7 @@    a    a    a   -a   +b    a    a    a

它的第一部分,也是文件的基本信息。

  --- f1 2012-08-29 16:45:41.000000000 +0800   +++ f2 2012-08-29 16:45:51.000000000 +0800

"---"表示变动前的文件,"+++"表示变动后的文件。

第二部分,变动的位置用两个@作为起首和结束。

  @@ -1,7 +1,7 @@

前面的"-1,7"分成三个部分:减号表示第一个文件(即f1),"1"表示第1行,"7"表示连续7行。合在一起,就表示下面是第一个文件从第1行开始的连续7行。同样的,"+1,7"表示变动后,成为第二个文件从第1行开始的连续7行。

第三部分是变动的具体内容。

   a    a    a   -a   +b    a    a    a

除了有变动的那些行以外,也是上下文各显示3行。它将两个文件的上下文,合并显示在一起,所以叫做"合并格式"。每一行最前面的标志位,空表示无变动,减号表示第一个文件删除的行,加号表示第二个文件新增的行。

GitHub(Git) diff

我们知道Git 提供了diff,那么如何看懂了呢?和linux中git的不同之处在哪里呢?

Git diff 对比的提交前和提交后,或者 add 前和add 后的文件对比。

Git 使用了主流的Git 合并格式

在查看Git 提交的时候,默认显示的提交前对比提交后的变动情况。

可以看见,提交前和提高后文件的对比diff 显示情况,很是一目了然。

总结

本文结合 diff的用法,在读懂diff - 阮一峰的网络日志 (ruanyifeng.com) 文章基础上进一步阐释git diff 等系列命令的输出结果。以及在Github 输出结果的表示,其本质都是diff 合并格式的扩展结果。用户只需要学习使用diff的合并格式用法即可。


原创内容,禁止抄袭!二〇二四年一月七日 13:38:23 

发表评论

0 评论