1 概述

2 diff命令

diff 命令是 Linux 上比较重要的命令行工具,用于比较文本内容,并找到不相同的地方,diff 在命令行中打印每一行的改动之处。

diff 程序的输出被称为补丁patch),在 Linux 系统中还有一个 patch 程序,可以根据 diff 的输出,将文件内容更新为另一个文件内容,diff版本控制工具不可或缺的一部分。

diff逐行比较的方式,比较文本文件的异同处。如果指定要比较目录,则 diff 会比较目录中相同文件名的文件,但不会比较其中子目录。

2.1 命令格式 & 参数解释

diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]
  • -<行数>  指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。
  • -a或–text  diff预设只会逐行比较文本文件。
  • -b或–ignore-space-change  不检查空格字符的不同。
  • -B或–ignore-blank-lines  不检查空白行。
  • -c  显示全部内文,并标出不同之处。
  • -C<行数>或–context<行数>  与执行"-c-<行数>"指令相同。
  • -d或–minimal  使用不同的演算法,以较小的单位来做比较。
  • -D<巨集名称>或ifdef<巨集名称>  此参数的输出格式可用于前置处理器巨集。
  • -e或–ed  此参数的输出格式可用于ed的script文件。
  • -f或-forward-ed  输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。
  • -H或–speed-large-files  比较大文件时,可加快速度。
  • -I<字符或字符串>或–ignore-matching-lines<字符或字符串>  若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。
  • -i或–ignore-case  不检查大小写的不同。
  • -l或–paginate  将结果交由pr程序来分页。
  • -n或–rcs  将比较结果以RCS的格式来显示。
  • -N或–new-file  在比较目录时,若文件A仅出现在某个目录中,预设会显示: Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。
  • -p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。
  • -P或–unidirectional-new-file  与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。
  • -q或–brief  仅显示有无差异,不显示详细的信息。
  • -r或–recursive  比较子目录中的文件。
  • -s或–report-identical-files  若没有发现任何差异,仍然显示信息。
  • -S<文件>或–starting-file<文件>  在比较目录时,从指定的文件开始比较。
  • -t或–expand-tabs  在输出时,将tab字符展开。
  • -T或–initial-tab  在每行前面加上tab字符以便对齐。
  • -u,-U<列数>或–unified=<列数>  以合并的方式来显示文件内容的不同。
  • -v或–version  显示版本信息。
  • -w或–ignore-all-space  忽略全部的空格字符。
  • -W<宽度>或–width<宽度>  在使用-y参数时,指定栏宽。
  • -x<文件名或目录>或–exclude<文件名或目录>  不比较选项中所指定的文件或目录。
  • -X<文件>或–exclude-from<文件>  您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件。
  • -y或–side-by-side  以并列的方式显示文件的异同之处。
  • –help  显示帮助。
  • –left-column  在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。
  • –suppress-common-lines  在使用-y参数时,仅显示不同之处。

3 案例演示

CASE0: 并排比对/输出 【推荐】

$ diff log2014.log log2013.log  -y -W 50
2013-01 2013-01
2013-02 2013-02
2014-03 | 2013-03
2013-04 2013-04
2013-05 2013-05
2013-06 2013-06
2013-07 2013-07
2013-07 | 2013-08
2013-09 2013-09
2013-10 2013-10
2013-11 <
2013-12 <

CASE1: 查看GIT工作区和暂存区间的文件差异(git diff -- {fileA} {fileB})

git diff 命令,默认查看的就是 工作区暂存区 之间文件的差异

    1. git diff : 查看工作区暂存区之间所有的文件差异
    1. git diff -- {fileName}:查看具体某个文件在工作区暂存区之间的差异
    1. git diff -- {fileName1} {fileName2} {fileName3} :查看多个文件在工作区暂存区之间的差异

【注意】:查看具体文件时 --{fileName} 之间有一个空格,{fileName1}{fileName2}{fileName3}之间也有空格

  • step0 初始条件:工作区、暂存区之间保持干净一致的状态

  • step1 假定: 已修改工作区中的文件

  • step2 查看文件的差异

  • step3 扩展:将工作区中修改的文件添加到暂存区后再比较差异情况

CASE2 : 查看【暂存区】和【版本库】之间文件的差异

官方文档写的就非常的好!

git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>…​]

This form is to view the changes you staged for the next commit relative to the named <commit>.
Typically you would want comparison with the latest commit, so if you do not give <commit>, it defaults to HEAD.
If HEAD does not exist (e.g. unborn branches) and <commit> is not given, it shows all staged changes.
--staged is a synonym of --cached. > 下面是我自己的译文:
此命令 用于查看 暂存区中和 指定提交 之间的文件差异。
特别指出:你可能最想比较暂存区与上一次提交之间的区别,所以,如果你不明确指定 提交的版本号,则默认是HEAD.
如果 HEAD 和 指定版本号都不存在,则该命令会展示暂存区中所有的修改。
--staged 参数和 --cached 参数是一致的。

git diff --cached : 查看暂存区和 上一次提交 的最新版本(HEAD)之间的所有文件差异

  • git diff --cached 版本号 : 查看暂存区和 指定版本 之间的所有文件差异
  • git diff --cached -- 文件名1 文件名2 文件名3 : 查看暂存区和 HEAD 之间的指定文件差异
  • git diff --cached 版本号 -- 文件名1 文件名2 文件名3 : 查看暂存区和 指定版本 之间的指定文件差异

CASE3: 查看不同版本库之间文件的差异

  • git diff 版本号1 版本号2 : 查看两个版本之间的差异
  • git diff 版本号1 版本号2 -- 文件名1 文件名2 : 查看两个版本之间的指定文件之间的差异
  • git diff 版本号1 版本号2 --stat : 查看两个版本之间的改动的文件列表
  • git diff 版本号1 版本号2 src : 查看两个版本之间的文件夹 src 的差异

X 参考文献

[Linux]常用命令之【diff】的更多相关文章

  1. linux常用命令:diff 命令

    diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...

  2. Linux常用命令(一)

    Linux常用命令 1. pwd查看当前路径(Print Working Directory)    [root@CentOS ~]# pwd/root 2. cd .. 返回上一级 .. 表示上一级 ...

  3. linux——常用命令与脚本

    linux常用命令 --文件管理pwd --查看当前目录cd --切换当前目录ls --列出当前目录下的所有文件touch --创建文件mkdir --建立目录rmdir --删除空目录rm --删除 ...

  4. DOS 和 Linux 常用命令的对比

    DOS 和 Linux 常用命令的对比 许多在 shell 提示下键入的 Linux命令都与你在 DOS 下键入的命令相似.事实上,某些命令完全相同. 本附录提供了 Windows的 DOS 提示下的 ...

  5. Linux常用命令速查备忘

    Linux常用命令速查备忘   PS:备忘而已,详细的命令参数说明自己man 一. 启动,关机,登入,登出相关命令 [login] 登录 [logout] 登出 [exit] 登出 [shutdown ...

  6. Linux常用命令英文全称与中文解释Linux系统

    Linux常用命令英文全称与中文解释Linux系统(转)   Linux常用命令英文全称与中文解释Linux系统 man: Manual 意思是手册,可以用这个命令查询其他命令的用法. pwd:Pri ...

  7. Linux 常用命令使用方法大搜刮

    Linux 常用命令使用方法大搜刮 1.# 表示权限用户(如:root),$ 表示普通用户  开机提示:Login:输入用户名  password:输入口令   用户是系统注册用户成功登陆后,可以进入 ...

  8. Linux 常用命令 (common commands for linux)

    Linux 常用命令 (Common Commands For Linux) 1.声明,此文章仅写基于 Bash shell 常用的命令,如果遇上命令在使用过程中提示没有,可能随着更新,命令也被替换掉 ...

  9. Linux常用命令手册

    Linux常用命令手册 NO 分类 PS1 命令名 用法及参数 功能注解 对应章节 1 文件管理 # ls ls -a 列出当前目录下的所有文件,包括以.头的隐含文件     文件管理 # ls ls ...

随机推荐

  1. scrollToFirstError失效解决方法

    ant design 使用 设置scrollToFirstError = true,表单验证失败后却没有滚动到第一个错误字段 解决方法: 在button按钮中加入 html-type = 'submi ...

  2. BinarySearch,逆序排列的数组的二分查找(折半查找),C++非递归+递归实现

    1 // To Compile and Run: g++ binary_search.cc -std=c++11 -Wall -O3 && ./a.out 8 2 3 4 #inclu ...

  3. 按list大小进行分组

    package cn.tk.netcore.rest;import java.util.ArrayList;import java.util.Arrays;import java.util.List; ...

  4. NOIP2009普及组

    T3]细胞分裂 [算法]数论 [题解]均分的本质是A整除B,A整除B等价于A的质因数是B的子集. 1.将m1分解质因数,即m1=p1^a1*p2^a2*...*pk^ak 所以M=m1^m2=p1^( ...

  5. Excel 多表头导入导出(借助Aspose)

    需求中Excell多表头,完成导入导出. Aspose 代码实现多表头方式借助代码比较繁琐, 借助模板方式. 简化逻辑. 注意,aspose从0开始索引. 导入部分代码: 实现选择导入Excel,导入 ...

  6. Android Studio查看指定APP日志

    1.启动Android Studio 2.View->Tool Windows->Terminal   3.在底部输入monitor 4.Android Devices Monitor新窗 ...

  7. cookies、session、token

    cookies 当登录的时候这个set-cookies就是把cookies的数据保存到了客户端的application/cookies中 session 表示为会话,存放在服务端,当用户登录,服务器就 ...

  8. asyncio基础用法

    说明:需要Python 3.7+ 1.并发运行两个coroutine,写法一: 用Task import asyncio import time async def say_after(delay, ...

  9. element表格数据v-for替换期望文字

    后端返回等级编码 "1","2"....并给你一个字典obj[ {dicCode: "4", dictFlag: "riskLev ...

  10. TProtocolException: Required field 'type' is unset! Struct:TPrimitiveTypeEntry(type:null)

    org.apache.thrift.protocol.TProtocolException: Required field 'type' is unset! Struct:TPrimitiveType ...