Git Revisions

Git Revisions

参考原文链接:https://git-scm.com/docs/gitrevisions

git revisions (Git 修订版本)代表特定的版本或范围,revisions 可以高效的定位你想要的提交,git 命令很多参数都支持 revisions 。

revisions 的具体格式有一整套匹配规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
----------------------------------------------------------------------
| Commit-ish/Tree-ish | Examples
----------------------------------------------------------------------
| 1. <sha1> | dae86e1950b1277e545cee180551750029cfe735
| 2. <describeOutput> | v1.7.4.2-679-g3bee7fb
| 3. <refname> | master, heads/master, refs/heads/master
| 4. <refname>@{<date>} | master@{yesterday}, HEAD@{5 minutes ago}
| 5. <refname>@{<n>} | master@{1}
| 6. @{<n>} | @{1}
| 7. @{-<n>} | @{-1}
| 8. <refname>@{upstream} | master@{upstream}, @{u}
| 9. <rev>^ | HEAD^, v1.5.1^0
| 10. <rev>~<n> | master~3
| 11. <rev>^{<type>} | v0.99.8^{commit}
| 12. <rev>^{} | v0.99.8^{}
| 13. <rev>^{/<text>} | HEAD^{/fix nasty bug}
| 14. :/<text> | :/fix nasty bug
----------------------------------------------------------------------
| Tree-ish only | Examples
----------------------------------------------------------------------
| 15. <rev>:<path> | HEAD:README.txt, master:sub-directory/
----------------------------------------------------------------------
| Tree-ish? | Examples
----------------------------------------------------------------------
| 16. :<n>:<path> | :0:README, :README
----------------------------------------------------------------------

来自 StackOverflow 的 一份回答:What are commit-ish and tree-ish in Git?

<sha1>

object 对象名称。
示例:

  • dae86e1950b1277e545cee180551750029cfe735
  • dae86e

<describeOutput>

git describe 的输出。

示例:

  • v1.7.4.2-679-g3bee7fb

<refname>

引用名称。

示例:

  • master
  • heads/master
  • refs/heads/master

@

单独一个 @ 表示 HEAD ,及当前分支。

[<refname>]@{<date>}

设置引用名称,同时设置时间过滤条件。

示例:

  • master@{yesterday}
  • HEAD@{5 minutes ago}
  • refs/heads/master@{1979-02-26 18:30:00}

<refname>@{<n>}

设置引用名称,同时设置倒数第 n 个版本。 0 代表最新的版本。

示例:

  • HEAD@{0}
  • master@{1}
  • refs/heads/master@{10}

@{<n>}

<refname>@{<n>} 一样,省略了 refname 表示 refname 默认为 HEAD 。

@{-<n>}

[<branchname>]@{upstream}

指定远程仓库分支名称。@{upstream} 可以简化成 @{u}

示例:

  • master@{upstream}
  • @{u}

[<branchname>]@{push}

指定分支名称,指示该分支将会push到远程仓库中。

示例:

  • master@{push}
  • @{push}

<rev>^[<n>]

在 revision 后面添加 ^ 符号,表示获取第 n 个父级对象( parent ),没有设置 n 时,表示第一个父级对象,^0 表示 commit 本身。

示例:

  • HEAD^
  • v1.5.1^0
  • HEAD^3

<rev>~[<n>]

<rev>^{<type>}

在 revision 后面添加 ^{<type>} 符号表示递归该引用直到找到对应类型(_<type>_)的 object 对象。

示例:

  • v0.99.8^{commit}
  • dae86e1950b1277e545cee180551750029cfe735^{tree}

<rev>^{}

表示递归该引用直到找到类型不是 tag 的 object 对象。

示例:

  • v0.99.8^{}
  • dae86e1950b1277e545cee180551750029cfe735^{}

<rev>^{/<text>}

匹配 <text>_,等效于 _:/<text>

示例:

  • HEAD^{/fix nasty bug}

:/<text>

正则表达式匹配字符串。

示例:

  • :/fix nasty bug
  • :/^foo

<rev>:<path>

匹配文件/目录名称。

示例:

  • HEAD:README
  • master:./README

:[<n>:]<path>