比较文件

1.本地文件<->本地文件

diff file_a file_b

这是系统提供的比较命令,用于比较本地文件或已经提交到版本库的文件。创建文件a和文件b,使用上述指令进行比较:


diff -u a b的输出信息中:

加上参数-u可以更详细地显示比较信息。

  • --- a表示a为原文件;
  • +++ b表示b为目标文件;
  • -1,3-表示原文件即a,1表示原文件中的第一行,3 表示到第3行。合起来的意思为:在原文件a中的1~3行;
  • 同理:+1,3表示:目标文件b中的1~3行;
  • 数据前面有三种符号,分别表示不同的信息:
  • 空格:表示该行在两个文件中都存在,如上图所示AABB这一行文件a,b都有;
    • :表示原文件a去掉该行就能变为目标文件b;
    • :表示原文件a加上该行就能变为目标文件b; 所以整个输出信息的意思为:AABB这一行两文件都有,只要原文件a去掉:
a1
a2

并加上:

a1
a2

就能变为目标文件b;

2.工作区<-暂存区

以下为git提供的比较命令,作用为:比较暂存区工作区中的同一文件。并且:原始文件暂存区中的文件,目标文件为工作区中的文件。示例如下:

git diff

首先,新建文件A.txtB.txt,修改其内容并提交到暂存区:


然后,在工作区中再次修改文件A.txtB.txt的内容:


此时使用git diff进行比较:


git diff的输出信息中:

  • --- a/A.txt:表示原文件为暂存区中的A.txt;
  • +++ b/A.txt:表示目标文件为工作区中的A.txt;
  • -1:其中-表示原文件,1表示从第1行开始。由于暂存区中的A.txt文件(原文件)只有1行,所以将原来的(-1,1)简写为-1;
  • +1,2:其中+表示目标文件,1,2表示工作区中的A.txt文件(目标文件)从第1行开始有2行;
  • hello world:表示原文件和目标文件中都存在的内容;
  • +hello java表示暂存区中的A.txt加上该行,就能变得与工作区中的A.txt一样;

可以看到该指令是将同一文件的工作区版本与暂存区版本进行比较,各比各的,并不会将A.txtB.txt进行比较。

3.工作区<-版本库

以下指令作用为:比较版本库工作区中的同一文件。并且:原始文件版本库中的文件,目标文件工作区中的文件。

git diff commit_id

用于比较指定commit id提交上的A文件和工作区中的A文件

git diff HEAD

用于比较最新提交上的A文件和工作区中的A文件:

上面的A文件仅为一个示例,以下同理。

如下图所示,先初始化test.txt为:版本库中的修改,然后进行一次提交;随后在工作区中为test.txt添加工作区的修改;然后执行上述比较指令,从显示出来的比较结果可知,工作区中的test.txt文件比最新一次提交的test.txt文件多了一行工作区中的修改内容。


4.暂存区<-版本库

以下指令作用为:比较版本库暂存区中的同一文件,其中原始文件版本库中的文件,目标文件为暂存区中的文件:

git diff --cached commit_id

用于比较指定提交上的A文件和暂存区中的A文件;

git diff --cached

用于比较最新提交上的A文件和暂存区中的A文件。示例如下:


可以看到,暂存区中的A.txt文件比最新提交中的A.txt文件多了一行hello java;暂存区中的B.txt文件比最新提交中的B.txt文件多了一行hello java2

5.总结

  关于目标文件与原始文件的判定,遵循的顺序为:工作区<-暂存区<-版本库(提交);

  上述比较指令的比较如下表所示:

指令 作用 原始文件 目标文件
diff <file1> <file2> 比较两个本地文件 本地文件/版本库 本地文件/版本库
git diff 比较暂存区和工作区中的同一文件 暂存区 工作区
git diff commit_id 比较指定commit id提交上的A文件和工作区中的A文件 版本库 工作区
git diff HEAD 比较最新提交上的A文件和工作区中的A文件 版本库 工作区
git diff --cached commit_id 比较指定提交上的A文件和暂存区中的A文件 版本库 暂存区
git diff --cached 比较最新提交上的A文件和暂存区中的A文件 版本库 暂存区

表格中的A文件仅为示例。

版权声明: 本文为智客工坊「AhuntSun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

results matching ""

    No results matching ""