====== git 工具 选择修订版本 ====== 选择修订版本,意思就是从众多提交中 选择一个需要的提交节点。也就是节点查询的作用。 {{https://git-scm.com/book/en/v2/images/double-dot.png}} ===== 通过hash值选择 ===== git log 可以看到 sha-1。 (举例) 可以通过 简短的 sha-1 选中,或者查看。 每个节点有一个唯一的hash 不会重复。几率非常小。比火星撞地球差不多。 git 命令都可以通过 哈希值来选中节点。分支只是哈希值的别名。标签也是。区别是分支可以移动。比如:git show ,git checkout, git reset 等 ===== 通过分支来引用 ===== 通过分支引用具体的提交节点是最常用的方式。一般不直接通过 ===== 引用日志 ===== git reflog 指的是我们用分支或者用 HEAD(当前工作空间所同步的节点) 对于各个节点的引用历史记录。也就是说我们对版本库都做了那些操作。HEAD 如何移动的。 这个日志类似 linux 的 shell 日志。表达的是 “自己”而不是其他成员的 操作历史记录。 可以通过 sha-1 或者 HEAD@{n} 来引用节点。 git reflog git show HEAD@{n} git checkout HEAD@{n} 注意:通过引用日志,即便刚刚删除的分支引用,仍然可以恢复回来。 ===== 祖先引用 ===== git show HEAD^ 应用当前节点的上一级。 git show d921970^ 同理 git show HEAD^ , git show HEAD~ , git show HEAD~1 三个命令是等价的。 git show HEAD~2 可以查看祖父提交 也可以用 git show HEAD^^ 也可以组合使用 作用同理 ===== 提交区间 ===== **双点 ..** git log master..develop 显示develop还没有提交到 master 的 节点历史。 git log develop..master 显示 master 还没有同步到 develop 的提交历史。 git log origin/master..HEAD 查看当前分支 还没有同步到 origin/master 的提交历史。(即将推送的内容) **三点 ...** git log master...develop 排除共有:所处两个引用的所有节点中,排除两个引用共同包含的节点。 git log master...develop --left-right 添加 --left-right 参数 可以用 <> 符号区分 节点属于 master 还是属于 develop 以下都表示:在refB 分支上 但是不在 refA 分支上的提交历史。(分支就是对节点的引用。因此用引用这个词更加通用) $ git log refA..refB $ git log ^refA refB $ git log refB --not refA ^ 语法的好处是可以 应用与 2个以上的 引用。 点号是两个引用之间。比如:在 refA refB 中,但是不在 refC 中的节点历史。 $ git log refA refB ^refC $ git log refA refB --not refC 这样构成了一个 提交历史的查询系统。可以获得 差异查询的结果。 本节重点,节点引用,节点查询。