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


     查看 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 100644
    --- a/a
    +++ b/a
    @@ -0,0 +1 @@
    +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 100644
    --- a/a
    +++ b/a
    @@ -0,0 +1 @@
    +test

    这时候执行git commit

    [root@ci-node1 git_test]# git commit -m "modify a"
    [master af5856a] modify a
     1 file changed, 1 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 100644
    --- a/a
    +++ b/a
    @@ -1 +1 @@
    -test
    +bbb
    没有输出,因为暂存区和本地仓库是一致的 
    // 没有输出,因为暂存区和本地仓库是一致的 
    [root@ci-node1 git_test]# git diff --cached a

     总结:

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

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

  • 相关阅读:
    ASP.NET MVC分部类的使用
    窗体初始化完毕后隐藏窗体
    让每个用户都有同样的输入法配置
    昨夜的失眠--从数据备份所想到的.
    电子书下载
    Microsoft .Net 框架 SDK 快速入门教程
    .net书籍代码下载 [雪冬寒'Blog]
    VISUAL C#.NET中文版WEB服务开发基础
    Citrix相关技术
    OA在线试用
  • 原文地址:https://www.cnblogs.com/mingerlcm/p/11414766.html
Copyright © 2020-2023  润新知