Git HEAD
大约 2 分钟
Git HEAD
HEAD 简介
HEAD
是当前分支引用的指针,它总是指向该分支上的最后一次提交。当做分支切换的时候,HEAD
是会跟着切换的,指针就会指向新的分支,其最终会落脚到某一个 commit 上。
相对引用(^n / ~n)
(<commit> | HEAD)^n
:指 HEAD 的第 n 个父提交(HEAD存在多个父提交的情况下)。如果 HEAD 存在 N 个父提交,那么 n < N(<commit> | HEAD)~n
:指的是 HEAD 的第n个祖先提交(<commit> | HEAD)~n = (<commit> | HEAD)^^^...(^的个数为n)
示例:
HEAD^
代表 “第一父提交”,也就是 “HEAD的父提交”。也可以使用~
,同样指向父提交,HEAD^
和HEAD~
是等价的。HEAD~2
代表 “第一父提交的第一父提交”,也就是 “祖父提交” —— Git 会根据你指定的次数获取对应的第一父提交。HEAD^^^
/HEAD~3
,也是第一父提交的第一父提交的第一父提交
分离头指针(dastached HEAD)
HEAD
不仅仅可以指代当前分支的最后一次提交,还可以不与分支挂钩。在分离头指针的情况下,就指代到了具体的 commit 上。
分离头指针表示目前正工作在没有分支的状态下,即指向了某个具体的提交记录。
当在分离头指针的情况下,做了 commit 以及变更,如果后续再进行分支切换的时候,没有与分支挂钩的 commit 以及变更很有可能被 Git 当做垃圾给清除掉。
- 如果需要做变更需要和某一个分支进行挂钩。
- 如果只是做一些尝试性的变更,则可以使用到分离头指针,后续不需要这些变更,就可以使用 git checkout 切换分支即可。