`git checkout HEAD` 行为背后的基本原理

Rationale behind behavior of `git checkout HEAD`

在执行 git checkout HEAD 时,我检查了我的 HEAD 指向的提交。例如,在执行 git reset --hard origin/master 之后,我用它来触发一些挂钩。

尽管如此,但没有以超脱 HEAD 告终的理由是什么?在上面的例子中,我仍然在重置之前检查过的任何分支上。我对此没有问题,但对我来说,语义与其他操作不一致。我希望以完全相同的提交结束,但有一个分离的 HEAD (这也可能有用,也许以某种方式可能)。

使用

git checkout --detach HEAD

或者干脆

git checkout --detach

以分离的 HEAD 状态检查 HEAD 提交本身。

也就是说,checkout 有时确实是一个有点令人困惑的命令(这促使 git 的开发人员最近引入了 restore and switch)。

请记住,在您的理论案例中,HEAD 不是直接指向提交而是指向分支。

A---B---C <<< master <<< HEAD

当您签出 HEAD 时,您会重新签出该分支而不是直接提交其提示(除非您明确指定)。