NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
## 7.1 选择修订版本 Git 允许你通过几种方法来指明特定的或者一定范围内的提交。 ### 7.1.1 单个修订版本 **简短的 SHA-1** 提供 `SHA-1` 的前几个字符就可以获得对应的那次提交,当然所提供的 `SHA-1` 字符数量不得少于 4 个,并且没有歧义。 Git 可以为 SHA-1 值生成出简短且唯一的缩写。 如果你在`git log` 后加上`--abbrev-commit` 参数,输出结果里就会显示简短且唯一的值;默认使用七个字符,不过有时为了避免 SHA-1 的歧义,会增加字符数: ```bash $ git log --abbrev-commit --pretty=oneline ``` **分支引用** 指明一次提交最直接的方法是有一个指向它的分支引用。如果想知道某个分支指向哪个特定的 `SHA-1`,或者想看任何一个例子中被简写的 `SHA-1` ,可以使用 `rev-parse` : ``` $ git rev-parse <branch> ``` **引用日志** Git 会在后台保存一个引用日志(reflog),引用日志记录了最近几个月 `HEAD` 和分支引用所指向的历史。 ``` $ git reflog ``` 值得注意的是,引用日志只存在于本地仓库,一个记录在自己的仓库里做过什么的日志。 其他人拷贝的仓库里的引用日志不会和你的相同;而你新克隆一个仓库的时候,引用日志是空的,因为你在仓库里还没有操作。 **祖先引用** 祖先引用是另一种指明一个提交的方式。 如果你在引用的尾部加上一个`^`, Git 会将其解析为该引用的上一个提交。可以使用`HEAD^`来查看上一个提交,也就是 “HEAD 的父提交”: ``` $ git show HEAD^ ``` 另一种指明祖先提交的方法是`~`。 同样是指向第一父提交,因此`HEAD~`和`HEAD^`是等价的。 而区别在于你在后面加数字的时候,`HEAD~2`代表 “第一父提交的第一父提交”,也就是 “祖父提交”。 ### 7.1.2 提交区间 **双点** 最常用的指明提交区间语法是双点。 这种语法可以让 Git 选出在一个分支中而不在另一个分支中的提交。例如有以下的提交历史: ![](https://img.kancloud.cn/9d/ae/9dae4cceaf2fb8ad6495986ef5e96539_800x148.png) 想要查看 experiment 分支中还有哪些提交尚未被合并入 master 分支。 你可以使用`master..experiment`来让 Git 显示这些提交。 ``` $ git log master..experiment ``` **多点** 需要两个以上的分支才能确定所需要的修订,比如查看哪些提交是被包含在某些分支中的一个,但是不在当前的分支上。例如,查看所有被`refA`或`refB`包含的但是不被`refC`包含的提交,你可以输入下面中的任意一个命令: ``` $ git log refA refB ^refC $ git log refA refB --not refC ``` **三点** 选择出被两个引用中的一个包含但又不被两者同时包含的提交。 ``` $ git log master...experiment ``` `log`命令的一个常用参数是`--left-right`,它会显示每个提交到底处于哪一侧的分支: ``` $ git log --left-right master...experiment ```