Git 对象

Git 提供了很多方法可以方便地访问 Git 库中的对象:

♦ 采用不分的 SHA1 哈希值。不必把 40 位的哈希值写全,只采用开头的部分(4 位以上),只要不与现有的其他哈希值冲突即可。

♦ 使用 master 代表分支 master 中最新的提交,也可以使用全称 refs/heads/master 或 heads/master。

♦ 使用 HEAD 代表版本库中最近的一次提交。

♦ 符号 ^ 可以用于指代父提交。例如:

  ο HEAD^ 代表版本库中的上一次提交,即最近一次提交的父提交。

  ο HEAD^^ 则代表 HEAD^ 的父提交。

♦ 对于一个提交有多个父提交,可以在符号 ^ 后面用数字表示是第几个父提交。例如:

  ο ad70b79^2 的含义是提交 a7d0b79 的多个父提交中的第二个父提交。

  ο HEAD^1 相当于 HEAD^ ,含义是 HEAD 的多个父提交中的第一个父提交。

  ο HEAD^^2 的含义是 HEAD^(HEAD父提交)的多个父提交中的第二个父提交。

♦ 符号 ~<n> 也可以用于指代祖先提交。例如:

  ad70b79~5 即相当于 bd70b79^^^^^。

♦ 提交所对应的树对象,可以用类似如下的语法访问:

  ad70b79^{tree}

♦ 某一次提交对应的文件对象,可以用如下的语法访问:

  ad70b79:path/to/file

♦ 暂存区中的文件对象,可以用如下的语法访问:

  :path/to/file

可以使用 git rev-parse 命令在本地版本库中练习一下:

$ git rev-parse HEAD

ad70b79bd5a58ab410e7b92debb8dc25102e4dac

$ git cat-file -p ad70

tree f58da9a820e3fd9d84ab2ca2f1b467ac265038f9
parent 896c8ae6f161e77f90690b459c333598b9f07f77
author Eric Wong <slackprogrammer@gmail.com> 1400603791 +0800
committer Eric Wong <slackprogrammer@gmail.com> 1400603791 +0800

which version checked in?

$ git cat-file -p ad70^

tree 190d840dd3d8fa319bdec6b8112b0957be7ee769
author Eric Wong <slackprogrammer@gmail.com> 1400583459 +0800
committer Eric Wong <slackprogrammer@gmail.com> 1400583459 +0800

initialized

$ git rev-parse ad70^{tree}

f58da9a820e3fd9d84ab2ca2f1b467ac265038f9

$ git rev-parse ad70^^{tree}

190d840dd3d8fa319bdec6b8112b0957be7ee769

上一篇:关于open falcon 与nightingale 的一些调研


下一篇:openfalcon源码分析之graph