首页 > 代码库 > Git暂存区之Git Diff魔法

Git暂存区之Git Diff魔法

在不同参数的作用下,git diff的输出并不相同。在理解了Git中的工作区,暂存区和版本库(当前分支)的最新版本分别是三个不同的目录树后,就非常好理解 git diff 的魔法般的行为了。

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

有什么办法能够像查看工作区一样直观地查看暂存区及HEAD中的目录树吗?对于HEAD指向的目录树,可以使用Git底层命令ls-tree来查看。

$ git ls-tree -l HEAD
100644 blob bb2f2a2c99a6608b400a63a2acf44a441194651a      58    welcome.txt

其中:

  • 使用 -l 参数可以显示文件的大小。上面的 welcome.txt 的大小为58字节。

  • 输出的welcome.txt文件条目从左到右,第一个字段是文件的属性(rw-r--r--),第二个字段说明是Git对象库中的一个blob对象(文件),第三个字段则是该文件在对象库中对应的ID——一个40位的SHA1哈希值格式的ID(这个后面会讲到),第四个字段是文件大小,第五个字段是文件名。

在浏览暂存区中的目录树之前,首先清除工作区当前的改动。通过 git clean -fd 命令清除当前工作区中没有加入版本库的文件和目录(非跟踪文件和目录),然后执行 git checkout  . 命令,用暂存区内容刷新工作区。

Git暂存区之Git Diff魔法