当我们 git 签出提交时会发生什么

What happens when we git checkout a commit

我想知道如果我们使用 git checkout <commit hash> 并且提交是在多个分支中,我们如何知道哪个被签出?

我不知道如何在视觉上做到这一点,所以我试着画了一点,抱歉。
我不允许直接 post 它所以这里是 link.
如果我们有这三个分支,那么我们 git checkout <Commit Z>,我们会得到分支 A 还是分支 B? 它是如何工作的?谢谢!

https://i.stack.imgur.com/Y3wJr.png

Branch是commit的reference,在用户眼中就是head of branch。如果您按字面意义(通过 SHA)签出提交,您将进入 head 分离状态。

git checkout <commit> 在此提交时设置 HEAD,无论任何分支可能指向或不指向所述提交。

工作树会相应更新,您会得到所谓的 detached HEAD。从这一点开始的进一步提交确实会将 HEAD 作为它们的父级,但是在您创建一个分支(或在此处创建一个现有的一个点)之前没有分支指向它。

分支名称只是提交哈希的漂亮名称(确切地说是分支 HEAD)。

签出提交哈希将使您进入 "detached head" 状态。

您可以阅读它here,或在线搜索分离头部状态及其含义

一个commit(hash)可以属于多个分支,多个分支的HEAD可以指向同一个commit hash。

签出提交(无论它是否是任何分支的 HEAD)将使您进入分离的 HEAD 状态。