查看 Git 区域文件的具体改动 git diff

  git status 只能让我们知道文件在 Git 区域内的改动状态,但如果我们想查看某个文件内具体改了什么(也可以理解为在不同 Git 区域中的差异),此时需要用 git diff 命令。

  对于 b 文件,由于是新增的文件,其只存在于工作区,且处于 Untracked 状态,Git 认为无论是哪两个 Git 区域之间的比对都没有意义,得到的结果是没有区别。

  而对于 a文件,由于已经被提交到仓库了,处于 Git 管理中,所以这个文件同时存在于三个 Git 空间(工作区,暂存区,仓库),我们在工作区内对其进行了文件改动,无论是比对工作区 vs 暂存区或者工作区 vs 仓库,得到的结果应该都是 a 文件里的具体变化内容。而如果比对暂存区 vs 仓库,得到的结果也应该是没有区别。

git diff 用在查看文件内容变化

查看文件当前变动(工作区 vs 暂存区)git diff

工作区做了改动

// 改动 a.txt 文件后可看到文件的具体变化
[root@ci-node1 git_test]# echo "test">>a

看看git stauts,文件被修改了,这个文件被git仓库管理

[root@ci-node1 git_test]# git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) modified: a no changes added to commit (use "git add" and/or "git commit -a")

看看文件里面改了什么 git status无法看到,使用git diff

对比工作区和暂存区

[root@ci-node1 git_test]# git diff a
diff --git a/a b/a
index e69de29..9daeafb
--- a/a
+++ b/a
@@ -, + @@
+test

暂存区和工作区的a做了哪些改动,加了test

//将 a 文件的变动暂存后,查看变化
[root@ci-node1 git_test]# git add a [root@ci-node1 git_test]# git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage) modified: a //对比工作区与暂存区,无变化,git diff 没有输出
[root@ci-node1 git_test]# git diff a // git add 后工作区和暂存区内容一致了,对比,

查看文件当前变动(工作区 vs 暂存区)git diff –cached

这时候对比暂存区与本地仓库,可以看到具体变化

//对比暂存区与本地仓库,可以看到具体变化
[root@ci-node1 git_test]# git diff --cached a
diff --git a/a b/a
index e69de29..9daeafb
--- a/a
+++ b/a
@@ -, + @@
+test

这时候执行git commit

[root@ci-node1 git_test]# git commit -m "modify a"
[master af5856a] modify a
file changed, insertion(+)
// 这时候再执行git diff --cached ,没有输出
[root@ci-node1 git_test]# git diff --cached a

暂存区和本地仓库一样了

再做个验证

// 工作区是干净的,三个区域 工作区、暂存区、本地仓库内容是一致的
[root@ci-node1 git_test]# git status
On branch master
nothing to commit, working tree clean
改动 a 文件后,工作区改动了,再看变化
//改动 a 文件后,工作区改动了,再看变化
[root@ci-node1 git_test]# echo "bbb">a

现在工作区和暂存区不一致的,但暂存区和本地仓库是一致的

// 现在工作区和暂存区不一致的,但暂存区和本地仓库是一致的
[root@ci-node1 git_test]# git diff a
diff --git a/a b/a
index 9daeafb..f761ec1
--- a/a
+++ b/a
@@ - + @@
-test
+bbb
没有输出,因为暂存区和本地仓库是一致的 
// 没有输出,因为暂存区和本地仓库是一致的
[root@ci-node1 git_test]# git diff --cached a

总结:

git diff 比较的是 工作区和暂存区

git diff --cached 比较的是 暂存区和本地仓库

git 命令 git diff 查看 Git 区域文件的具体改动的更多相关文章

  1. 1git命令的使用,查看git仓库状态,添加文件到git跟踪,git提交,查看git分支,查看git仓库日志信息,切换git分支,解决git分支合并后出现冲突的问题

    1新建一个存储git的文件夹,命令是: toto@toto-K45VD:~$ mkdir gitfolder 2初始化一个git仓库,命令是: toto@toto-K45VD:~$cd gitfold ...

  2. Git命令——提交、查看、后退、前进

    Git常用命令 1. 命令git init把这个目录变成Git可以管理的仓库: 2. 命令git commit把文件提交到仓库 这里需要注意的是,Git只能跟踪文本文件的改动,如txt文件,网页,所有 ...

  3. git 命令行(三)-删除文件

    在Git中,删除也是一个修改操作,我们实战一下,有一个多余的文件:src/common/Util2.js 我们需要删除这个文件, 一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用 rm命令 ...

  4. android Git命令家底儿及Git数据通信原理详解

    声明:本文为CSDN原创投稿文章,未经许可,禁止任何形式的转载. 现在大部分使用的都是SVN,也有一部分迁移了Git,虽然挺好的,不过还有其它很多版本控制的工具,并没有谁最好用,最重要的是适合自己的公 ...

  5. Git命令之回退篇 git revert git reset

    Git command之回退篇 欲练回退 必先了解:HEAD.index.WorkingCopy HEAD: 当前所在的分支版本顶端的别名,也就是最新的一次commit. git commit 之后与 ...

  6. 记录自己使用到的git命令行代码与git使用流程

    1.安装创建版本库 新建一个文件夹,用命令行实现: $ cd /d             //进入d盘 $ mkdir gitproject      //新建gitproject文件夹 $ cd ...

  7. git 命令提交项目到git服务器

    1.先下载git,然后安装git https://git-scm.com/downloads 2.在电脑任意盘创建一个目录 3.在创建的目录下点击右键 4.初始化git 使用git init 初始化, ...

  8. Git命令之diff

    工作区(working tree),暂存区(index /stage),本地仓库(repository) git跟不同的参数,比较不同的区间的版本. git diff:是查看working tree与 ...

  9. Git命令家底儿及Git数据通信原理详解

    http://geek.csdn.net/news/detail/72807?utm_source=tuicool&utm_medium=referral

随机推荐

  1. 安卓数据库sqllite查看工具Android Debug Database使用教程

    要使用Android Debug Database,首先得在安卓项目的build.gradle(module:app)文件中加入如下代码: debugCompile 'com.amitshekhar. ...

  2. 基于ElementUI封装可复用的表格组件

    <template> <section class="ces-table-page"> <!-- 表格操作按钮 --> <section ...

  3. AtCoder Beginner Contest 137 D题【贪心】

    [题意]一共有N个任务和M天,一个人一天只能做一个任务,做完任务之后可以在这一天之后的(Ai-1)天拿到Bi的工资,问M天内最多可以拿到多少工资. 链接:https://atcoder.jp/cont ...

  4. 017_linuxC++之_多态的引入

    多态:一种接口,多种方法(同一种调用方法,根据不同的对象,调用不同类中的函数)静态联编:非虚函数,在编译时确定好动态联编:   1. 对象里有指针,指向虚函数表 2. 通过指针,找到表,调用虚函数 3 ...

  5. kubernetes1.11.1 部署prometheus

    部署前提:已经安装好了kubernetes的集群,版本是1.11.1,是用kubeadm部署的. 2台虚拟机:master:172.17.1.36      node1:172.17.1.40 pro ...

  6. JVM(十二),垃圾回收面试题

    十二.垃圾回收面试题 1.Object的finalize()方法 2.Java中的强软弱虚四种引用 (1)强引用 (2)软引用(间接引用) (3)弱引用 (4)虚引用 (5)四种引用区别

  7. Navicat创建数据库或导入数据库

    双击点亮数据库 导入数据库 点击开始

  8. js 获取滚动条的高度

    function getScrollTop() { var scroll_top = 0; if (document.documentElement && document.docum ...

  9. python定时任务-sched模块

    通过sched模块可以实现通过自定义时间,自定义函数,自定义优先级来执行函数. schedule = sched.scheduler( time.time,time.sleep) schedule是一 ...

  10. 最远 Manhattan 距离

    最远 Manhattan 距离 处理问题 K维空间下的n个点,求两点最远曼哈顿距离 思路 以二维为例介绍算法思想,即可类推到k维.对于P,Q两点,曼哈顿距离|Px-Qx|+|Py-Qy|可看作(±Px ...