zoukankan      html  css  js  c++  java
  • git学习(五):git diff魔法

    不同参数下git diff输出并不相同,理解了工作区,暂存区和版本库的关系之后就很容易理解diff了。

    工作区、暂存区和版本库的目录树浏览

    清除工作区中未被git管理的文件

    1 git clean -fd

    查看暂存区和HEAD中的目录树

    1 git ls-tree -l HEAD

    其中:

    • 参数-l可以显示文件大小
    • 第一个字段时文件的属性(rw-r--r--,644)
    • 第二个字段说明时Git对象库中的一个blob对象(文件)
    • 第三个字段时该文件在对象库中对应的ID——40位的SHA1哈希值
    • 第四个字段时文件大小
    • 第五个字段是文件名

    要显示暂存区的目录树,可以使用git ls-files命令

    1 git ls-files -s

    与git ls-tree不同的是第三个字段不是文件大小而是暂存区编号

     如果想针对暂存区的目录树使用git ls-tree命令,

    1 git wirte-tree                // 首先将暂存区的目录树写入git对象库
    2 git ls-tree -l 9431f4a        // 对该目录树执行
    • 40位的SHA1哈希值的ID可以用指代文件内容(blob)、目录树(tree)和提交。
    • 命令git write-tree的输出就是写入Git对象库的TreeID,这个ID作为下一条命令的输入。
    • git中的ID只要不冲突可以只使用前几位。
    • git ls-tree可以用-r递归显示树结构,而不是最终的文件。

    思考:

    git ls-tree -l 后面还要接一个参数一会儿是提交,一会儿是HEAD。所以其实提交和HEAD其实本质上是一回事?

    还有,之前做一个需求的时候需要进行对象的对比,发现那些内容改变了,然后讨论的时候提到的git是增量保存的,是这样的么?

    这里是不是说每个提交其实都有对应目录树,不是单独为每个提交保存一个目录树,而是增量保存的。

    git diff的魔法

    1 git diff                               // 工作区和暂存区比较
    2 git diff HEAD/master                   // 工作区和版本库的比较
    3 git diff --cached/--staged  /HEAD      // 暂存区和版本的比较
  • 相关阅读:
    实现 HTML页面 Table 标签分页打印
    windows定时休眠设置
    python画树
    anaconda历史版本
    枚举
    is 与 as 运算符举例
    Microsoft.ACE.OLEDB.12.0报错解决方法
    winform一个带自动完成功能的TextBox
    DWZ中整合第三方jQuery(kit日历控件)插件
    asp.net 使用NPOI,泛型反射,XML导入导出excel
  • 原文地址:https://www.cnblogs.com/tuhooo/p/9185832.html
Copyright © 2011-2022 走看看