Git 吉特:是“头”吗;“当前分支机构”;或;当前分支的尖端“;?

Git 吉特:是“头”吗;“当前分支机构”;或;当前分支的尖端“;?,git,Git,在Git词汇表文档()中: HEAD被定义为“当前分支”。在同一段的后面,它进一步说“HEAD是对存储库中HEAD之一的引用” 但是,上面的一段定义了头是什么:“分支的尖端的提交的命名引用。” 在引用StackOverflow时,“正如O'Reilly Git book,第二版,第69页所述,HEAD总是指当前分支上最近的提交”,这意味着“HEAD是当前分支的提示” 我很困惑。全大写字母的标题是当前分行的(1)还是当前分行的提示 注意:没有解决我的问题。两者都有。我们谈论的是: 一个分支,从人

在Git词汇表文档()中:

  • HEAD
    被定义为“当前分支”。在同一段的后面,它进一步说“
    HEAD
    是对存储库中
    HEAD
    之一的引用”

  • 但是,上面的一段定义了
    头是什么:“分支的尖端的提交的命名引用。”

  • 在引用StackOverflow时,“正如O'Reilly Git book,第二版,第69页所述,
    HEAD
    总是指当前分支上最近的提交”,这意味着“
    HEAD
    是当前分支的提示”

    我很困惑。全大写字母
    的标题是当前分行的
    (1)还是当前分行的提示


    注意:没有解决我的问题。

    两者都有。我们谈论的是:

    • 一个分支,从人类的角度来看有其直观的含义:从“主干”(通常是
      master
      )或地面(初始提交)衍生出的提交链

    • Git看到的一个分支,它只跟踪最近的提交。对于Git来说,分支只是引用提交链顶端的命名指针


    一旦你知道这两个定义在实践中是一致的,就没有实际的歧义了。

    与文档所说的内容无关(这可能需要一些更正,dunno),HEAD总是站在你站的地方,很可能是一个分支的尖端。。。但可能不会。比方说,您签出master~2,但没有指向master~2的分支。然后HEAD在master~2上,您正在分离HEAD状态下工作。

    HEAD
    就是您当前指向的位置。这可以是分支(指向提交堆栈的指针)或提交本身。在典型用例中,它将指向一个分支。但是,它也可以指向提交(此代码段假定您是某个git repo的根):

    (基本)Matthews MacBook Pro:abc matt$git checkout-b测试
    切换到新的分支“测试”
    (基础)马修斯MacBook Pro:abc马特$cat.git/头
    参考:参考/头部/测试
    (基础)Matthews MacBook Pro:abc matt$git收银主机
    切换到“主”分支
    您的分支机构是最新的“来源/主”。
    (基础)马修斯MacBook Pro:abc马特$cat.git/头
    参考号:参考号/主管/主管
    (基础)Matthews MacBook Pro:abc matt$git log-2
    提交5d4fe79e315c302722cfdfef3dd049f720db5acc(主机->主机,原点/主机,原点/主机,测试)
    作者:马特·梅塞斯米特
    日期:2018年9月25日星期二20:05:38-0400
    问题155索尔。
    提交73cdc8f6a679664e3b92a826377b280aadf31de1
    作者:马特·梅塞斯米特
    日期:2018年9月25日星期二19:47:50-0400
    轻松的热身。
    (基本)Matthews MacBook Pro:abc matt$git结帐73cdc8f6a679664e3b92a826377b280aadf31de1
    注意:正在签出“73cdc8f6a679664e3b92a826377b280aadf31de1”。
    你处于“超脱的头部”状态。你可以四处看看,做实验
    更改并提交它们,您可以放弃在此过程中所做的任何提交
    通过执行另一个签出,在不影响任何分支的情况下进行状态设置。
    如果要创建新分支以保留创建的提交,可以
    再次将-b与checkout命令一起使用(现在或以后)。例子:
    git签出-b
    头部现在在738华氏度,这是一个简单的热身。
    (基础)Matthews MacBook Pro:leetcode matt$cat.git/头
    73cdc8f6a679664e3b92a826377b280aadf31de1
    
    “树枝”和“树枝尖”之间的区别实际上没有多大意义。这有点像询问指针和指针尖端之间的区别。分支只是指向事物(提交的堆栈),而
    HEAD
    的行为方式类似(可以指向分支或提交)。我想这可以归结为语义学和语言学


    HEAD
    还可以包括分离的
    HEAD
    ,这意味着没有分支,它只指向提交。你是否将其包含在你所要求的定义中?这是一个关于语言学的问题。从技术上讲,HEAD是单个提交(分支的顶端)。但是,树枝也只是指树枝的顶端,所以头就是树枝。我们人类认为分支是commit及其所有祖先,但实际上分支只是对单个commit的引用。也许我应该包括这一条。同样相关的是:我不想用“标签”来描述分支:太多的混乱空间。另外,您可能对@jubobs感兴趣,我不这么认为:分支的行为类似于标记,还有一些分支,而且标记是不言自明的。但同样的Git词汇表文档还说,“分支”是一条活跃的开发路线。分支上最近的提交被称为该分支的提示。”看起来文档采用了人类直观的定义来定义“分支”是什么,但laster使用Git的定义来定义“头”是什么。@Leedehai。无论是关于整个链条还是仅仅是提示,通常都可以从上下文中推断。“两者”都是正确的答案(我投了更高的票)。另一个诀窍是,在内部,Git有两个接口来获取关于
    的答案:一个回答连接到哪个分支名称
    ?还有其他的答案是
    HEAD
    选择哪个提交?(这些接口分解为更多的内部接口,但这些接口是起点:我们是否需要符号名,例如现在是
    HEAD
    master
    ?或者我们是否需要提交散列,例如现在是
    HEAD
    commit
    a123456…
    (base) Matthews-MacBook-Pro:abc matt$ git checkout -b test
    Switched to a new branch 'test'
    (base) Matthews-MacBook-Pro:abc matt$ cat .git/HEAD
    ref: refs/heads/test
    (base) Matthews-MacBook-Pro:abc matt$ git checkout master
    Switched to branch 'master'
    Your branch is up to date with 'origin/master'.
    (base) Matthews-MacBook-Pro:abc matt$ cat .git/HEAD
    ref: refs/heads/master
    (base) Matthews-MacBook-Pro:abc matt$ git log -2
    commit 5d4fe79e315c302722cfdfef3dd049f720db5acc (HEAD -> master, origin/master, origin/HEAD, test)
    Author: Matt Messersmith <nah@blah.com>
    Date:   Tue Sep 25 20:05:38 2018 -0400
    
        Problem 155 sol.
    
    commit 73cdc8f6a679664e3b92a826377b280aadf31de1
    Author: Matt Messersmith <nah@blah.com>
    Date:   Tue Sep 25 19:47:50 2018 -0400
    
        An easy warmup.
    (base) Matthews-MacBook-Pro:abc matt$ git checkout 73cdc8f6a679664e3b92a826377b280aadf31de1
    Note: checking out '73cdc8f6a679664e3b92a826377b280aadf31de1'.
    
    You are in 'detached HEAD' state. You can look around, make experimental
    changes and commit them, and you can discard any commits you make in this
    state without impacting any branches by performing another checkout.
    
    If you want to create a new branch to retain commits you create, you may
    do so (now or later) by using -b with the checkout command again. Example:
    
      git checkout -b <new-branch-name>
    
    HEAD is now at 73cdc8f An easy warmup.
    (base) Matthews-MacBook-Pro:leetcode matt$ cat .git/HEAD
    73cdc8f6a679664e3b92a826377b280aadf31de1