首页 文章

git中的HEAD是什么?

提问于
浏览
191

最后一次提交,HEAD和我在目录中可以看到的文件状态之间似乎有区别 .

什么是HEAD,我该怎么办?我应该避免哪些错误?

4 回答

  • 76

    HEAD是对当前签出分支中最后一次提交的引用 .


    这有一个小例外,它是独立的HEAD . 分离的HEAD是您在签出提交(或标记)而不是分支时最终会出现的情况 . 在这种情况下,你必须把它想象成一个没有名字的临时分支;所以我们只有HEAD而不是命名分支引用 . 它仍然允许你进行提交(这会更新HEAD),所以如果你把一个分离的HEAD想象成一个没有名字的临时分支,那么上面的简短定义仍然是正确的 .

  • 151

    HEAD 是当前检出的提交的引用(引用) .

    在正常状态下,'s actually a symbolic ref to the branch you have checked out - if you look at the contents of .git/HEAD you'会看到像"ref: refs/heads/master"这样的东西 . 分支本身是对分支顶端的提交的引用 . 因此,在正常状态下, HEAD 实际上是指当前分支顶端的提交 .

    它也有可能有一个“独立的HEAD” . 当您检查除(本地)分支之外的某些内容(如远程分支,特定提交或标记)时会发生这种情况 . 最常见的地方是在交互式rebase期间,当您选择编辑提交时 . 在分离的HEAD状态下,您的HEAD是对提交的直接引用 - .git / HEAD的内容将是SHA1哈希 .

    一般来说,HEAD只是一个方便的名称,意思是“你已经检查了什么”,你真的不必担心它 . 只要知道你检查了什么,并记住你可能不想提交,如果你不在分支(分离的HEAD状态),除非你知道你在做什么(例如在交互式rebase中) .

  • 9

    Git中的HEAD指针

    Git维护一个名为HEAD的引用变量 . 我们将此变量称为指针,因为它的目的是引用或指向存储库中的特定提交 . 当我们进行新的提交时,指针将改变或移动以指向新的提交 . HEAD始终指向我们存储库中当前分支的尖端 . 现在,这与我们的存储库有关,而不是我们的暂存索引或我们的工作目录 .

    想到它的另一种方式是我们的存储库的最后状态或最后检出的内容,并且因为它是存储库停止或最后状态的位置,您还可以说HEAD指向下一个提交的父级或它的提交写作的地方 .

    我认为考虑这个问题的一个好比喻是盒式磁带录音机上的播放和录音头 . 当我们开始录制音频时,磁带移过磁头,并将其记录到磁带上 . 当我们按下Stop时,记录头停止的地方就是当我们再次按下Record时它会再次开始记录的地方 . 现在我们可以四处移动,我们可以将头部移动到不同的位置,但无论头部位于何处当我们再次点击Record时,它将开始录制 .

    Git中的HEAD指针非常相似,它指向我们接下来要开始录制的地方 . 这是我们在我们的存储库中为我们已经提交的东西而离开的地方 .

  • 8

    这应该是一个评论,但它对于提交来说太长了

    我一直认为 HEAD~5 意味着GO之前提交5次 . 它没有't carry the GO part of the command. It only carries the reference/'在哪里'命令的一部分 .

    通俗地说,它用来回答以下问题: WHERE 我应该去吗?提交哪个?

    如果你说

    HEAD 它表示(引用)当前提交

    HEAD~1 表示(提交)1之前提交

    HEAD~87 表示(参考)87提交之前

    git checkout HEAD~1 实际上将转到该引用/提交

相关问题