指定哈希与相对引用
指定hash
通过指定提交记录哈希值的方式在 Git 中移动不太方便。
用 git log 来查查看提交记录的哈希值。哈希值在真实的 Git 世界中也会更长(基于 SHA-1,共 40 位)。可以仅输入fed2 而不是 fed2da64c0efc5293610bdd892f82a58e8cbc5d8一长串字符。
通过哈希值指定提交记录很不方便,所以 Git 引入了相对引用。使用相对引用的话,你就可以从一个易于记忆的地方(比如 bugFix 分支或 HEAD)开始计算。
- 使用
^向上移动 1 个提交记录 - 使用
~<num>向上移动多个提交记录,如~3
相对引用
操作符 ^
把这个符号加在引用名称的后面,表示让 Git 寻找指定提交记录的父提交。所以 master^ 相当于“master 的父节点”。master^^ 是 master 的第二个父节点
现在咱们切换到 master 的父节点
git checkout master^

git checkout C3
git checkout HEAD^
git checkout HEAD^
git checkout HEAD^

切换到 bugFix 的父节点。这会进入分离 HEAD 状态。
git checkout bugFix^
“~”操作符
如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 ~。
该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。
git checkout HEAD~4
强制修改分支位置 -f
使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交:

git branch -f master HEAD~3
上面的命令会将 master 分支强制指向 HEAD 的第 3 级父提交。

相对引用为我们提供了一种简洁的引用提交记录 C1 的方式, 而 -f 则容许我们将分支强制移动到那个位置。
移动 HEAD,master 和 bugFix 到目标所示的位置


git checkout c6
git branch -f master HEAD
git checkout c1
git branch -f bugFix HEAD^
随意移动到对应的位置去创建分支
但是该操作符后面的数字与 ~ 后面的不同,并不是用来指定向上返回几代,而是指定合并提交记录的某个父提交。还记得前面提到过的一个合并提交有两个父提交吧,所以遇到这样的节点时该选择哪条路径就不是很清晰了。
Git 默认选择合并提交的“第一个”父提交,在操作符 ^ 后跟一个数字可以改变这一默认行为。
这里有一个合并提交记录。如果不加数字修改符直接checkout master^,会回到第一个父提交记录。(在我们的图示中,第一个父提交记录是指合并提交记录正上方的那个提交记录。)
checkout master^


checkout master^2

使用 ^ 和 ~ 可以自由地在提交树中移动,非常给力
git checkout HEAD~ # c6
git checkout HEAD^2 # c5
git checkout HEAD~2 # c3


or
git checkout HEAD~^2~2
在对应位置创建新的分支
git branch newFeature HEAD~^2~2
posted on 2025-10-14 22:34 chuchengzhi 阅读(11) 评论(0) 收藏 举报
浙公网安备 33010602011771号