指定哈希与相对引用

指定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^

1607616339254-e0f0e44c-62a5-483b-b301-60db633c4a5c.png

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

1607616437697-97327be9-7677-4f95-9b36-9b264775adf1.png

切换到 bugFix 的父节点。这会进入分离 HEAD 状态。

git checkout bugFix^

“~”操作符

如果你想在提交树中向上移动很多步的话,敲那么多 ^ 貌似也挺烦人的,Git 当然也考虑到了这一点,于是又引入了操作符 ~。

该操作符后面可以跟一个数字(可选,不跟数字时与 ^ 相同,向上移动一次),指定向上移动多少次。

git checkout HEAD~4

强制修改分支位置 -f

使用相对引用最多的就是移动分支。可以直接使用 -f 选项让分支指向另一个提交:

1607616722470-457d16a9-564d-4302-a72f-dd94d5e4d2ff.png

git branch -f master HEAD~3

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

1607616748635-add1b2d4-20b9-41bf-bf64-e1d685daf7b1.png

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

移动 HEAD,master 和 bugFix 到目标所示的位置

1607616919252-0693c7cd-36ca-474b-a9cb-be93c49f7213.png1607617163662-6008cc4a-b4f7-48a1-b08f-5c8a8c5c470a.png

git checkout c6
git branch -f master HEAD
git checkout c1
git branch -f bugFix HEAD^

随意移动到对应的位置去创建分支

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

Git 默认选择合并提交的“第一个”父提交,在操作符 ^ 后跟一个数字可以改变这一默认行为。

这里有一个合并提交记录。如果不加数字修改符直接checkout master^,会回到第一个父提交记录。(在我们的图示中,第一个父提交记录是指合并提交记录正上方的那个提交记录。)

checkout master^

1607622459647-6f5f785d-1b7d-47b1-aaf3-73b045e124e7.png1607622502989-7a31e1c6-5d00-4777-a97f-2c01b3c3a48c.png

checkout master^2

1607622516627-1c817f25-b60d-409d-b689-5c3419700770.png

使用 ^ 和 ~ 可以自由地在提交树中移动,非常给力

git checkout HEAD~ # c6
git checkout HEAD^2 # c5
git checkout HEAD~2 # c3

1607622544912-af80449f-9129-42c4-a231-dbec26433dca.png1607622599936-61c9ba61-536f-4c21-a336-caba9e37eee0.png

or

git checkout HEAD~^2~2

在对应位置创建新的分支

git branch newFeature HEAD~^2~2

posted on 2025-10-14 22:34  chuchengzhi  阅读(11)  评论(0)    收藏  举报

导航

杭州技术博主,专注分享云计算领域实战经验、技术教程与行业洞察, 打造聚焦云计算技术的垂直博客,助力开发者快速掌握云服务核心能力。

褚成志 云计算 技术博客