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. target与currentTarget与this的区别

    target与currentTarget与this的区别: target在事件流的目标阶段:currentTarget在事件的捕获.目标及冒泡阶段. 只有当事件流处在目标阶段的时候,二者的指向才是一致 ...

  2. 海洋cms v6.53 v6.54版本漏洞复现

    海洋cms v6.53 v6.54版本漏洞复现 参考链接: 今天发现freebuf上一篇海洋cms的漏洞,来复现一下. http://www.freebuf.com/vuls/150042.html ...

  3. CF1108F MST Unification

    题目地址:CF1108F MST Unification 最小生成树kruskal算法的应用 只需要在算法上改一点点 当扫描到权值为 \(val\) 的边时,我们将所有权值为 \(val\) 的边分为 ...

  4. 手写代码注意点--java.lang.Math 相关

    1-如果用到了Math的函数,需要手动写上: import java.lang.Math; 2-求x的y次方,用的是Math.pow(x,y); 注意,返回值是double!!! 不是int, 如果需 ...

  5. 【CentOS7.0】虚拟机如何实现扩展存储空间

    写在前面的一些小废话 有时候,虚拟机随着使用,会导致存储不够,这时就需要给虚拟机扩容. 扩容的前提是,此虚拟机没有快照. 扩容时,需要编辑虚拟机设置.为了形成对比,第一张图片是扩容前,第二张图片是扩容 ...

  6. 国产 WEB UI 框架 (收费)-- Quick UI,Mini UI

    国产 WEB UI 框架 (收费)-- Quick UI,Mini UI : http://www.uileader.com/ http://www.miniui.com/

  7. 使用命令行解析php文件

    使用命令行解析php文件,这样可以调用Log4PHP库中的一些demo,因为默认的输出使用命令行作为输出. 建一个bat文件: echo 以下是使用命令行解析php文件 C:\xampp\php\ph ...

  8. 在Visual Studio里配置及查看IL

    原文地址:http://www.myext.cn/other/a_25162.html 在之前的版本VS2010中,在Tools下有IL Disassembler(IL中间语言查看器),但是我想直接集 ...

  9. Zeppelin0.7.2结合hive解释器进行报表展示

    前提:服务器已经安装好了hadoop_client端即hadoop的环境hbase,hive等相关组件 1.环境和变量配置①拷贝hive的配置文件hive-site.xml到zeppelin-0.7. ...

  10. zabbix-3.0.4添加对windows 2008r2的监控

    zabbix-3.0.4添加对windows 2008r2的监控 一.windows客户端的配置关闭windows防火墙或者开通10050和10051端口(1).关闭防火墙(不推荐直接关闭,测试可以这 ...