首页 > 解决方案 > `git fetch` 后跟 `git checkout FETCH_HEAD` 检查看似任意的意外提交

问题描述

我经常处于想要从 git 远程检出特定 refspec 而不在本地给它命名的位置。我通常用来执行此操作的命令是以下形式:

git fetch <remote-url> refs/x/y/z && git checkout FETCH_HEAD

大多数情况下,这按预期工作。也就是说,在 refspec 所指的提交上,我最终处于分离的头部状态。然而,大约每周一次,命令完成没有错误,但我最终在祖先链的某个地方出现了一些我没有要求的奇怪的古老提交。

示例输出:

remote: Counting objects: 25525, done
remote: Finding sources: 100% (396/396)
remote: Total 396 (delta 129), reused 376 (delta 129)
Receiving objects: 100% (396/396), 167.79 KiB | 2.33 MiB/s, done.
Resolving deltas: 100% (129/129), completed with 68 local objects.
From <remote-url>
 * branch                  refs/x/y/z -> FETCH_HEAD
Checking out files: 100% (26834/26834), done.
Previous HEAD position was ...
HEAD is now at 8315f9bc89 Some extremely old commit that is definitely not refs/x/y/z

在此之后立即执行完全相同的命令给了我我希望首先获得的提交。

这里可能出了什么问题?考虑到它说它将 FETCH_HEAD 设置为我要求的并且没有返回错误,我什至不明白为什么它在下一刻指向错误的提交。

建议使用哪些步骤来调试它?我能看到的唯一模式是,当它出现问题时,它总是完全相同的旧提交被签出。它似乎没有任何特殊之处,只是它看起来像是 repo 中具有标签的第一个更改之一。

标签: git

解决方案


推荐阅读