git 命令(补充篇)的本质理解

1 标签, git tag tag_name SHA

  • 本质: 在某次commit 上打上标签tag_name ,标签在代码库中起着“锚点”的作用。 注意: commit 由 SHA、缺省HEAD(当前) 指定。

  • 命令:

$  git tag V0 8d59682bed           ## 打上版本标签
$  git log V0                              ## 直接操控V0 ,等价于 git log 8d59682be
  • 补充:Git Describe 能帮你在提交历史中移动了多次以后找到方向;当你用 git bisect(一个查找产生 Bug 的提交记录的指令)找到某个提交记录时,或者是当你坐在你那刚刚度假回来的同事的电脑前时, 可能会用到这个命令。

2. git describe

git describe 的​​语法是:

git describe

可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)。

它输出的结果是这样的:

 <tag>_<numCommits>_g<hash>

tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。

当 ref 提交记录上有某个标签时,则只输出标签名称

3. 选择父提交记录 ^ ,有多个父亲时候,后面跟数字表示第几次提交

  • 本质: 操作符 ^ 与 ~ 符一样,后面也可以跟一个数字。 但是该操作符后面的数字与 ~ 后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个父提交。还记得前面提到过的一个合并提交有两个父提交吧,所以遇到这样的节点时该选择哪条路径就不是很清晰了。

  • 命令:操作符 ^ 与 ~ 符一样,后面也可以跟一个数字。 含义不同
    Git 默认选择合并提交的“第一个”父提交,在操作符 ^ 后跟一个数字可以改变这一默认行为。

  • 示例 1:

$  git checkout master^                 ## HEAD 在当前分支,当前位置第一个父亲记录

执行前,图3.1

执行后,图3.2

  • 示例2:
 $  git checkout master^2                 ## HEAD 在当前分支,当前位置第2个父亲记录

执行前,如图3.1

执行后,图3.3

  • 示例3: 综合示例
$  git checkout HEAD~                  ## HEAD 从当前位置C7   向上移动1个记录, 到 C6
$  git checkout HEAD^2                ## HEAD 从当前位置C6   移动到第2个父亲记录,到 C5
$  git checkout HEAD~2                ## HEAD 从当前位置C5   向上移动2个记录, 到 C3

上述命令,等价于以下命令

$  git checkout HEAD~^2~2
执行前,图3.4
执行后,图3.5

posted on 2017-07-03 10:40  小林觉  阅读(304)  评论(0编辑  收藏  举报

导航