通常,当您在 git 存储库中运行类似这样的内容时:
git checkout abc1234
您最终处于分离的 HEAD 状态。如果运行git branch
,输出将如下所示:
* (detached from abc1234)
master
这是很好的预期行为。
我最近一直在玩 pygit2,并且遇到了一些我以前没见过的东西。假设我执行以下操作:
repo = pygit2.discover_repository("/path/to/repo")
repo.head = "abc1234"
我希望存储库处于分离的 HEAD 状态。出于所有意图和目的,我相信这是在这样做之后。但是,输出git branch
看起来有点不同:
* (no branch)
master
有谁知道区别是什么,为什么会有区别,以及这意味着什么?
编辑:
下面是使用 pygit2 克隆存储库后的 reflog,将提交 SHA1 哈希分配给 repo.head,然后运行git checkout master
,然后运行git checkout myhash
:
69df316 HEAD@{0}: checkout: moving from master to 69df3161f315e9b13ba4bd811635c11f67616598
d6ece61 HEAD@{1}: checkout: moving from 69df3161f315e9b13ba4bd811635c11f67616598 to master
69df316 HEAD@{2}:
d6ece61 HEAD@{3}: clone: from file:///path/to/repo