Git查看版本改动—— git diff

 HEAD 表示当前版本,也就是最新的提交。上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ 
往上100个版本写100个 “ ^ ” 比较容易数不过来,所以写成 HEAD~100 HEAD~2 相当于 HEAD^^

我们在 Git 版本回退里  可以利用 HEAD 关键字进行指定版本的回退。

那么对于 $ git diff HEAD -- <filename>  命令是不是也能操作不同的情况?


自己试了试一个例子:

命令 $ git diff 查看对比两次文件内容具体修改了什么。

命令 $ git diff HEAD -- <filename> (“--”前后有空格),可以查看工作区版本库里面最新版本的区别。

步骤:

  1. 第一步:在Git里添加test.txt。最初内容是数字“1”。并commit 提交到版本库里。
  2. 第二步:增加数字“2”,并提交。
  3. 第三步:增加数字“3”,并提交。
  4. 第四步:增加数字“4”,并提交。
  5. 第五步:增加数字“5”,并提交。



最后文件内容为:



假设仓库里已提交的有五个版本,依次提交的是A、B、C、D、E 。


  • 在都已提交的版本库中:

执行 $ git diff <filename> 命令,命令行窗口不会输出文件的改动信息。

执行 $ git diff HEAD -- <filename>  命令同样也不会输出文件的改动信息。因为当前工作区未做改动。

执行 $ git diff HEAD^ -- <filename> 命令则可以查看最近两次提交版本的区别(版本E和版本D的差别——增加数字“5”)

执行 $ git diff HEAD^^ -- <filename> 命令则可以查看最近一次提交和最近一次提交的上上个版本的区别(版本E和版本C的差别——增加数字“4”和“5”)

执行 $ git diff HEAD^^^ -- <filename>  命令则可以查看版本E和版本B的差别——增加数字“3”,“4”和“5”。

执行 $ git diff HEAD~4 -- <filename>  命令则可以查看版本E和版本A的差别——增加数字“2”,“3”,“4”和“5”。等同于HEAD^^^^



现在增加第六步:再增加数字“6”。分三种情况,还未执行 add、add 后还未commit、add 并commit(版本F)。



在工作区做新的改动后,还未提交:

  • 第一种情况:修改文件内容后还未执行 add 命令

此时执行 $ git diff <filename> 命令,可以查看对比最近一次提交的版本,刚刚在工作区修改了什么内容(工作区和版本E的差别——增加数字“6”)。

同样执行 $ git diff HEAD -- <filename> 命令,也可以查看对比最近一次提交的版本,刚刚工作区修改了什么内容——增加数字“6”。

如果执行 $ git diff HEAD^ -- <filename> 则会显示工作区与仓库里最近一次提交的上一次提交的版本的改动信息(工作区和版本D的差别——增加数字“5”和“6”)。

如果执行 $ git diff HEAD^^ -- <filename> 则会显示工作区与仓库里最近一次提交的上两次提交的版本的改动信息(工作区和版本C的差别——增加数字“4”,“5”和“6”)。

依次类推。。


  • 第二种情况:修改文件内容后继续执行了 add 命令

此时执行 $ git diff <filename> 命令。命令行窗口不会输出文件的改动信息。

而执行 $ git diff HEAD -- <filename> 命令则可以查到工作区与最近一次提交的版本库里面的区别(工作区和版本E的差别——增加数字“6”)。

以此类推。。


  • 第三种情况:修改文件内容后继续执行了 add 命令后,并把文件commit 到仓库

此时执行$ git diff <filename> 命令和  $ git diff HEAD -- <filename> 命令,窗口都不会输出文件的改动信息。

而执行 $ git diff HEAD^ -- <filename> 命令则可以查看最近两次提交版本的区别,以此类推。即该情况同上述在都已提交的情况下相同,不做赘述。


总结: 对于  $ git diff <filename> 、$ git diff HEAD -- <filename> 、 $ git diff HEAD^ -- <filename> (包括HEAD^^、HEAD^^^、以及以此类推 HAED~number)这三种命令

在都已提交的版本库中。如果想查看其中两个提交都修改了哪些内容。可以使用  $ git diff HEAD^ -- <filename> 命令开始查看。以此类推。(即从 HEAD^ 开始便可以了,


在工作区改动后,还未执行add命令的时候命令 $ git diff <filename> 和 命令  $ git diff HEAD -- <filename> 两个都可以查看当前工作区和最近一次提交的版本之间的差别以此类推 HEAD^^、HEAD^^^ 等可以查看当前工作区与之前指定某版本的差别。所以当我们在工作区修改过还没有添加都暂缓区的时候可以用这些命令查看刚刚在工作区改动了哪里。


 而工作区改动后并且 执行add 命令后但还未提交,   $ git diff <filename>  将不能再进行比较。但可以继续用关键词HEAD、HEAD^ 等进行比较。以此类推。


展开阅读全文
©️2020 CSDN 皮肤主题: 终极编程指南 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值