前言
对于《progit》书籍中Git tools-> Revision Selection一节中的知识点进行记录。
选择祖父节点
在 “引用名称” 或者对应的 “SHA-1” 值后面加上 “^” 符号,表示引用指定对象的父对象,比如 HAED^
就表示引用 HEAD对象的父对象。另外 “^” 符号可后接数字1或者2,后接数字2仅用于多方合并的场景,其中数字表示引用第几个父对象,第一个对象表示当前分支下指定对象的父对象,第二个对象表示被合并分支下指定对象的父对象,默认为当前分支下的父对象。
引用祖先对象还有另一种方式,就是在引用名称或者SHA-1值后面添加“ ~ ”符号,“~”后面也可以接数字,不接数字时与“^”等价。后接数字时,表示“递归N次引用,比如HEAD~2
, 表示引用HEAD对象的祖父节点,HEAD~3
表示引用HEAD对象的祖祖父节点”。注意“~”与“^”是可以混用的,比如HEAD~3^2
表达引用HEAD对象的祖祖父节点的被合并分支上的父节点。
选择一组提交对象
使用 “双点号” 可以选择一组特定的提交对象,语法为commit1..commit2
,表示commit2可接触到的而commit1接触不到的提交对象的集合。本质就是集合差运算。如下例,展示了zszj分支中有的工作,而master分支没有的工作:
“双点号” 的语法决定只能指定两个引用名称或者SHA-1,为解决指定多个引用名称的问题,有另一种形式可以代替双点号,就是在引用名称或者SHA-1值之前使用“^”或者“not”,表示不包含指定引用所能接触到的提交对象。比如git show -q refa refb ^refc
表示“a、b引用能接触到,但c引用接触不到的提交对象集合”。
选择一组提交还有另一种常见的形式,使用 “三点号” 从两个引用对象的可接触集合中返回异或集合。如下返回仅在master分支,或者仅在zszj分支的提交对象集合,选项 --left-right 标识了返回元素仅能被哪个特定的引用所接触到。
参考资料
- 《pro Git》——Git tools-> Revision Selection