git pull拉取

git pull对于拉下来的修改文件自动对其进行git add /rm 及git commit 操作。所以拉下来的文件有那些修改,查看的方式可把它们归结于上一次提交的比较。

git diff HEAD 显示工作目录与git仓库之间的差异,

git diff HEAD^ 则显示上一次提交之前工作目录与git仓库之间的差异。所以我们在git pull后,可以通过git diff HEAD^ 来查看拉下来的文件有那些具体的修改。

git diff 显示工作目录与索引文件之间的差异

git diff –cached显示索引文件与git仓库之间的差异

git diff HEAD 显示工作目录与git仓库之间的差异

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^ 等进行比较。以此类推。

git使用diff----git-pull之后如何查看拉下来的文件有那些修改的更多相关文章

  1. Git fetch和git pull的区别

    Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin mastergit log - ...

  2. git fetch和git pull(转载)

    From:http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到 ...

  3. Git fetch和git pull的区别(转)

    原文: http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地 ...

  4. 使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录

    Linux kernel  的官方 GIT地址是: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git 可以从这个地 ...

  5. 关于git fetch 和git pull 的区别

    1.fetch 相当于是从远程获取最新版本呢到本地,不会自动merge. git fetch origin master:tmpgit diff tmp git merge tmp 2. git pu ...

  6. git fetch and git pull &冲突

    1.git fetch和git pull之间的区别 git fetch只会将本地库所关联的远程库的commit id更新至最新,fetch不会改变代码,如果想使代码更新,需要使用git merge o ...

  7. git clone、git pull和git fetch的用法及区别

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流.Git 常用命令速查表 最近在一个学习小组里学习AI的课程,我们所有的学习资料和homework都放在gitlab上.今天一个小队友从gitlab ...

  8. git pull和git merge区别&&Git冲突:commit your changes or stash them before you can merge. 解决办法

    http://blog.csdn.net/sidely/article/details/40143441 原文: http://www.tech126.com/git-fetch-pull/ Git中 ...

  9. git fetch 和 git pull 的区别

    Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin master git log ...

随机推荐

  1. no plugin found for prefix 'tomcat 7' in the current project

    使用maven build编译出错 “no plugin found for prefix 'tomcat 7' in the current project..........” 参照下面方法 ht ...

  2. RESTful支持

    springmvc restful 支持 - 哎幽的成长 - CSDN博客http://blog.csdn.net/u012373815/article/details/47208345 RESTfu ...

  3. Android自定义控件三种方式

    1.组合原生控件(继承自ViewGroup.LinearLayout.FrameLayout.RelativeLayout等)   将原生空间做组合,自定义一些事件 2.自己绘制控件(继承自View) ...

  4. Netty实现简单私有协议

    本文参考<Netty权威指南> 私有协议实现的功能: 1.基于Netty的NIO通信框架,提供高性能异步通信能力 2.提供消息的编码解码框架,实现POJO的序列化和反序列化 3.提供基于I ...

  5. [转] Understanding Convolutional Neural Networks for NLP

    http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-for-nlp/ 讲CNN以及其在NLP的应用,非常 ...

  6. Excel删除重复值

    Sub Uniquedata()Dim rCell As Range'创建Dictionary对象Set d = CreateObject("Scripting.Dictionary&quo ...

  7. for循环查找元素怎么跳出for循环

    应用场景: 当我们通过for循环来循环对象或者数组时,当找到符合条件的数据时,想要跳出这个循环,不在执行循环继续往后面查找. 解决方法: for循环里面使用return没有效果,于是,我们回到最初控制 ...

  8. MongoDB 的 upsert

    MongoDB 的update 方法的三个参数是upsert,这个参数是个布尔类型,默认是false.当它为true的时候,update方法会首先查找与第一个参数匹配的记录,在用第二个参数更新之,如果 ...

  9. Cisco端口限速配置

    作者:邓聪聪 Cisco端口限速的配置 配置案例如下: 定义策略组: access-list ID permit ip any any 模版关联策略组: class-map match-all nam ...

  10. VC显示网页验证码、模拟CSDN网页登录

    摘要:by:koma 这两天,本来想花点时间研究一下QQ空间.农场外挂,于是抓包分析一了下,只可惜,在QQ网页登录时进行了加密处理,可惜我对网页编程一窍不通.有些朋友曾讲过那些是通过JS代码进行加密, ...