什么是 git revision
根据官网描述
http://git-scm.com/docs/git-rev-parse
SPECIFYING REVISIONS
A revision parameter<rev>typically, but not necessarily, names a commit object. It uses what is called an extended SHA-1 syntax. Here are various ways to spell object names.
git revision 大多数情况下指的都是 commit,但是也指其他支持 SHA-1 语法的对象,如 tree, blob等。
最常见的语法
- 完整的SHA-1
96328665cbd4ad422665c3b0daa571016ff8309f
- 简短方式 可以用
rev-parse来获取
$ git rev-parse --short 96328665cbd4ad422665c3b0daa571016ff8309f
9632866
区间方式
见如下图,git rev-parse命令的行为同git log
- 双点
..双点还有一个等价方式c1..c2等价于^c1 c2 - 三点
...

排除 Commit Exclusions
^<rev>(caret) Notation
为了排除某个提交的可达提交,使用前缀^符号。
例如:^r1 r2表示从r2可以到达的提交,但不包括从r1可以到达的提交(即r1及其祖先)。等价于 r1 … r2
父提交相关
如图,d1 有两个父提交,b4 c2
- 表示第一个父提交
b4d1^1 - 表示第二个父提交
c2d1^2 - 表示所有的父提交
b4和c2d1^@顺便解释下,为什么用
@表示呢?个人猜测因为 shell中@表示数组,就拿来用以表示所有的父提交了。
注意 ^放在前后表达不同的含义
- 放在commit 前是否定、排除的含义。
- 放在commit 后是父提交

父提交排除
r1^!符号包括提交r1,但不包括其所有的父类。这个符号本身是指单个提交r1。<rev>^-[<n>]符号包括<rev>,但不包括第<n>个父级,n默认为1这通常对查看合并提交很有用,
你只需通过<commit>^-就可以得到合并提交<commit>中合并的分支的所有提交(包括<commit>本身)。
还是拿上图作为例子:
git rev-parse d1^@
显示
b4
c2
git rev-parse d1^-1
显示
d1
^b4
致谢
如果您觉得有用,欢迎打赏一元

本文详细介绍了Git中的revision参数,包括最常见的语法,如完整SHA-1和简写方式,区间选择,如何排除特定提交,以及父提交的相关操作。通过示例解析了^、...、~等符号的用法,帮助理解如何有效地在Git历史中查找和筛选提交。



9676

被折叠的 条评论
为什么被折叠?



