git commit (git revision) 表达大全

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

什么是 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

  • 表示第一个父提交 b4 d1^1
  • 表示第二个父提交 c2 d1^2
  • 表示所有的父提交 b4c2 d1^@

    顺便解释下,为什么用@表示呢?个人猜测因为 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

致谢

如果您觉得有用,欢迎打赏一元

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值