11.Git操作-文件对比

文件对比要对比什么?

在该节内容中,主要围绕以下2个核心进行差异对比操作.

  1. Git的主要分区可以分为工作区暂存区本地仓库远程仓库
  2. Git实际上是一套内容寻址文件系统,一切的提交实际都是对一个引用
  • 如何对比两个区的差异?如何对比两个区中指定文件的差异?
  • 如何对比两个引用节点的差异?如何对比两个引用节点中指定文件的差异?

差异对比

Git中进行差异对比的命令是git diff,其用法如下:

git diff [options] [ [commitId-A(以该提交节点为基础,默认为工作区当前状况)] commitId-B(与基础节点做对比,为默认为HEAD)] [filePath]

关于--options

  1. 关于--cached
    • 若加上了该参数,那么Git的操作对象会从暂存区中获取
    • 若不加该参数,那么Git的操作对象会从工作区中获取
  2. 关于--stat
    • 若加上了该参数,那么Git只会打印有差异的文件,而不会打印文件的具体差异信息
    • 若不加该参数,那么Git的会打印文件的具体差异信息
  3. 关于-w
    • 加上-w参数,会忽略空白字符变更比较
    • 不加上-w参数,对比操作会将空白字符的变更也记作为一个差异变更

关于commitId

  • commitId 代表引用节点,可以是分支名、一个提交节点、Tag标签等
  • commitId 若没有指定,则默认使用HEAD
  • commitId 若只指定了一个(commitId-B),则对比当前工作区(若指定了--cached参数则默认为暂存区)与指定的节点(默认是HEAD)的差异
  • commitId 若只指定了两个,则对比commitId-B相较于commitId-A的差异,commitId-A默认为当前工作区(若指定了--cached参数则默认为暂存区)与指定的节点commitId-B【默认为暂存区(若指定了--cached参数则默认为HEAD节点)】的差异

关于filePath

  • 若没有指定filePath,则打印所有差异;若指定了filePath则只打印指定文件的差异

cat index.php and cat 1.php

工作区 VS 暂存区

  • 操作对象的基础为:工作区 – 不需要加--cached参数
  • 对比对象为暂存区还没有所谓的提交节点 – 不指定commitId-B
# 对比当前工作区与暂存区差别
$ git diff
# 对比当前工作区 index.php  与 暂存区 index.php 的差别
$ git diff index.php

git-diff

git-diff

工作区 VS 本地仓库/远程仓库

  • 操作对象的基础为:工作区 – 不需要加--cached参数
  • 对比对象为仓库(已经有引用节点) – 指定commitId-B【值得留意:若没有指定filePath而当前暂存区又没有任何操作对象,Git会自动切换为HEAD指针-本地仓库最后一次提交】
# 对比当前工作区与本地仓库差别
# 虽然:若暂存区没有任何暂存对象时,`commitId-B`会自动切换为HEAD,但建议若对比对象有提交点则自己手动输入HEAD/或提交节点
$ git diff HEAD
# 对比当前工作区 index.php 与本地仓库指定提交节点(commitB) index.php 的差别
$ git diff commitB index.php

注意:在对比有已经有应用节点的对象,若指定了filePath,那么commitId-B是必须要指定的

暂存区 VS 本地仓库/远程仓库

  • 操作对象的基础为:暂存区 – 需要加--cached参数
  • 对比对象为仓库(已经有引用节点) – 需要指定commitId-B
# 对比当前暂存区与本地仓库/远程仓库差别
$ git diff --cached [HEAD/commitId-B]
# 对比当前工作区 index.php  与 暂存区 index.php 的差别
$ git diff --cached [HEAD/commitId-B] index.php

对比任意两个引用节点

  • 操作对象的基础为:引用节点 – 不需要加--cached参数
  • 对比对象均为引用节点 – 需要指定两个commitId
# 对比当前本地仓库与远程仓库最后一次提交的差别【假设在fast分支,远程仓库名为orgin】
$ git diff HEAD orgin/fast

# 对比 fast 分支与 master分支 的最后一次提交差别
$ git diff fast master

# 对比 commit-A 与 commit-B 两次提交的差别
$ git diff commit-A commit-B

扩展

  • HEAD 当前分支的最后一次commit
  • HEAD^ 当前分支的倒数第2次commit
  • HEAD~n 当前分支的倒数第n次commit

转载请声明出处: MinsonLee的博客:https://minsonlee.github.io

扫描下方二维码,关注公众号,接收更多实时内容

新猿呓码

打赏一个呗

取消

感谢客官打赏,您的打赏使我动力十足!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦