通常情况下,当你在git仓库中运行以下命令时:
```bash
```
git checkout abc1234
您会进入一个分离的 HEAD 状态。如果运行 git branch
命令,输出将会类似于下面这个样子:
* (detached from abc1234)
master
这是正常且预期的行为。
最近我一直在尝试使用pygit2,发现了一些以前没有见过的东西。假设我执行以下操作:
repo = pygit2.discover_repository("/path/to/repo")
repo.head = "abc1234"
我希望仓库处于分离头状态。在此之后,我相信实际上是这样的。但是,git branch
的输出结果看起来有些不同:
* (no branch)
master
有人知道差异是什么,为什么会有差异以及它代表了什么吗?
编辑:
下面是使用pygit2克隆存储库、将提交SHA1哈希分配给repo.head、然后运行git checkout master
和git checkout myhash
后的reflog:
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