git使用diff----git-pull之后如何查看拉下来的文件有那些修改
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> (“--”前后有空格),可以查看工作区和版本库里面最新版本的区别。
步骤:
- 第一步:在Git里添加test.txt。最初内容是数字“1”。并commit 提交到版本库里。
- 第二步:增加数字“2”,并提交。
- 第三步:增加数字“3”,并提交。
- 第四步:增加数字“4”,并提交。
- 第五步:增加数字“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之后如何查看拉下来的文件有那些修改的更多相关文章
- Git fetch和git pull的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin mastergit log - ...
- git fetch和git pull(转载)
From:http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到 ...
- Git fetch和git pull的区别(转)
原文: http://www.tech126.com/git-fetch-pull/ Git中从远程的分支获取最新的版本到本地有这样2个命令:1. git fetch:相当于是从远程获取最新版本到本地 ...
- 使用 GIT 获得Linux Kernel的代码并查看,追踪历史记录
Linux kernel 的官方 GIT地址是: http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git 可以从这个地 ...
- 关于git fetch 和git pull 的区别
1.fetch 相当于是从远程获取最新版本呢到本地,不会自动merge. git fetch origin master:tmpgit diff tmp git merge tmp 2. git pu ...
- git fetch and git pull &冲突
1.git fetch和git pull之间的区别 git fetch只会将本地库所关联的远程库的commit id更新至最新,fetch不会改变代码,如果想使代码更新,需要使用git merge o ...
- git clone、git pull和git fetch的用法及区别
声明:码字不易,转载请注明出处,欢迎文章下方讨论交流.Git 常用命令速查表 最近在一个学习小组里学习AI的课程,我们所有的学习资料和homework都放在gitlab上.今天一个小队友从gitlab ...
- 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中 ...
- git fetch 和 git pull 的区别
Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge git fetch origin master git log ...
随机推荐
- 【tmos】字段update_time如何动态的更新
1.数据库设置 2.数据库不设置,用Jpa的注解来完成 @EnableJpaAuditing注解 @SpringBootApplication @EnableJpaAuditing public cl ...
- D - Stone Division HackerRank - stone-division (博弈+搜索)
题目链接:https://cn.vjudge.net/problem/HackerRank-stone-division 题目大意:给你n,m,然后是m个数.每一次你可以选择一个a[i],如果能被n整 ...
- zabbix系列 ~ 报警模式
一 简介:聊聊zabbix的报警方式二 报警方式 邮件,短信,钉钉,微信三 准备 需要预选准备好对应报警方式的脚本四 web端设置 1 设置报警方式 2 设置报警触发器 1 选择报警信息 ...
- Maven SSH三大框架整合的加载流程
<Maven精品教程视频\day02视频\03ssh配置文件加载过程.avi;> 此课程中讲 SSH三大框架整合的加载流程,还可以,初步接触的朋友可以听一听. < \day02视频\ ...
- Docker安装MySQL
查看镜像 docker search mysql 拉取镜像 docker pull mysql:5.7 说明:5.7为指定下载的版本,可以更换其他版本 运行镜像 docker run --name m ...
- javascript编程基础1
1,javascript能干什么? 直接写入html中: <script> document.write("<h1>这是一级标题</h1>") ...
- 为什么要重写equals和hashcode方法
equals hashcode 当新建一个java类时,需要重写equals和hashcode方法,大家都知道!但是,为什么要重写呢? 需要保证对象调用equals方法为true时,hashcode ...
- 牛客国庆训练,CCPC Camp DAY1 J 倍增,括号匹配
https://www.nowcoder.com/acm/contest/201#question 题意:中文不翻译了 解法的个人理解: 对于一个合法的区间$[L,R]$ 1.显然其左括号的匹配位置都 ...
- Spring+Hibernate 多数据源不同事务创建
环境:Spring 3.0 ,Hibernate 3.5 ,同类型数据库(DB2) 编前语:此片仅粗略的描述使用Spring和Hibernate采用注入方式管理多数据源在不同事务的情况下使用的方法. ...
- Zookeeper-Watcher机制与异步调用原理
转载于:http://shift-alt-ctrl.iteye.com/blog/1847320 Watcher机制:目的是为ZK客户端操作提供一种类似于异步获得数据的操作. 1)在创建Zookeep ...