HEAD 的移动也是我们常用的操作。HEAD 就是一个指针,其指向的对象有两种情况。
1. HEAD -> 提交对象 # HEAD 直接指向提交对象
2. HEAD -> 分支名 -> 提交对象 # HEAD 指向分支名,分支名指向最后一次提交对象
移动 HEAD 的命令:
git checkout <SHA-1>
git checkout HEAD[^/~<num>/^<num>]
git checkout 分支[^/~<num>/^<num>]
git checkout <SHA-1>
将 HEAD 移动到指定 SHA-1 值的提交对象上,这种方式很简单,只需要知道想要将 HEAD 移动到那个提交对象上即可。不过由于需要提交对象的 HEAD 值,因此往往需要先用 git log
去查看提交对象的 SHA-1 值,有些繁琐。
^
和 ~
是相对引用,用于简化移动 HEAD 方式,使我们不需要使用 SHA-1 值即可进行移动 HEAD。
^
是向上移动一次。使用 git checkout HEAD^
表示将 HEAD 根据当前的提交向上移动一次,指向父提交。而 git checkout 分支^
表示将 HEAD 指向指定分支最后一次提交的父提交上。
^
只移动一次,如果我们需要向上移动n个父提交,就需要打n个 ~
,比较麻烦。~<num>
就是简化了这个过程,使用 git checkout HEAD~6
表示将 HEAD 根据当前提交向上移动6次,而 git checkout 分支~6
则是将 HEAD 指向指定分支最后一次提交向上移动6次的父提交。
^<num>
是适用于有多个父提交的提交对象(即分支合并得到的提交对象),我们使用 git checkout HEAD^
如果该提交对象有多个父提交,默认是将 HEAD 指向直接的父提交,如果希望指向其他的父提交可以用 ^<num>
来移动。
例如,下图所示的提交记录,C6 是有两个父提交的提交对象,现在想要将 HEAD 移动到 C2 处。
git checkout main^^2^