Git功能众多,其中一个重要功能是可以比对文件之间的差异。

举一个常见的例子,如果代码被恶意挂码,如果被挂码文件较大,想找到挂码的地方可能要费一点周折,利用Git的比对功能,则可以非常轻松的找出文件被挂码的位置。git diff命令可实现我们的需求。

一.比较暂存区与工作区之间的差异:

暂存区两个文件的内容如下:[HTML] 纯文本查看 复制代码蚂蚁部落一

以上是readme.txt文件内容。[HTML] 纯文本查看 复制代码antzone

以上是antzone.txt文件内容。

现在工作区对这两个文件分别增加了一行,比对代码如下:[Shell] 纯文本查看 复制代码$ git diff

代码运行效果截图如下:

默认状态下,就是比较暂存区与工作区之间的差别。

关于比对的格式可以参阅git diff 输出格式详解一章节。比对指定文件之间的差异,代码如下:[Shell] 纯文本查看 复制代码$ git diff readme.txt

上面代码仅仅比对暂存区和工作区中readme.txt文件的差异,代码运行效果截图如下:

二.比对指定commit与工作区的文件:

比对分支文件与工作区文件的差异,其实与比对commit提交中的文件与工作区文件差异是一回事,因为分支就是指向某个commit提交的。首先看一下当前提交历史记录,代码如下:[Shell] 纯文本查看 复制代码$ git log --oneline

代码运行效果截图如下:

下面查看一下最后一次提交与工作区文件之间的差异,代码实例如下:[Shell] 纯文本查看 复制代码$ git diff f2303a6 readme.txt

以上代码可以比对f2303a6提交中指定文件与工作区对应文件的差异。

代码运行效果截图如下:

三.比对暂存区与指定提交差异:

前面都是与工作区进行比对,下面介绍一下指定commit提交与暂存区的比对。

代码实例如下:[Shell] 纯文本查看 复制代码$ git diff --cached readme.txt

默认是比对暂存区和最新提交的指定文件。

代码运行效果截图如下:

当然我们可以比对指定提交与暂存区文件差异,代码实例如下:[Shell] 纯文本查看 复制代码$ git diff --cached f2303a6 readme.txt

以上代码可以比对f2303a6提交下readme.txt文件与暂存区下对应文件的差异。