Git 当前分支更新时是否会更新工作目录?

Git 当前分支更新时是否会更新工作目录?,git,Git,在提问之前,我想知道我对一些Git概念的理解是否正确,请随时纠正我: 分支名称指向分支的提示(即结束提交),并且 HEAD指向当前分支的分支名称,并且 当前分支定义为签出到工作目录的分支 以下是我的问题: 通过git命令(任何可以向分支添加提交的git命令)向分支添加新提交时 问题: git命令是否总是将分支名称向前移动以指向 新的承诺 或者有git命令,可以向分支添加新的提交 不要移动分支名称,因此需要我运行一些 附加git命令来移动它 什么时候 通过git命令和 分支名称向前移动以指向

在提问之前,我想知道我对一些Git概念的理解是否正确,请随时纠正我:

  • 分支名称指向分支的提示(即结束提交),并且
  • HEAD指向当前分支的分支名称,并且
  • 当前分支定义为签出到工作目录的分支
以下是我的问题:

  • 通过git命令(任何可以向分支添加提交的git命令)向分支添加新提交时

    问题:

    git命令是否总是将分支名称向前移动以指向 新的承诺

    或者有git命令,可以向分支添加新的提交 不要移动分支名称,因此需要我运行一些 附加git命令来移动它

  • 什么时候

    • 通过git命令和
    • 分支名称向前移动以指向当前分支中的新提示提交
    问题:

    • 是否需要额外更新HEAD

      我的猜测是否定的,因为HEAD已经指向当前分支的名称,即 当前分支的名称已更新为指向新分支 提示提交当前分支,并移动当前分支的 name不会改变HEAD指向当前位置的事实 分支机构的名称。因此,在不改变头部的情况下,一切看起来都很好

    • 工作目录是否已更新为与分支的新提示提交相同

      或者可以使用工作目录 仍然与分支的上一个提示提交相同,并且 以将当前分支的新提示提交签出到 工作目录,我需要运行一些额外的git命令吗

    下面是两个案例/示例,分别是具体的git命令(
    git push
    git pull
    ),这让我想到并提出了上述两部分的问题,即可以向分支或当前分支添加提交的任意git命令的问题:

  • git push
    向远程服务器上的分支添加新提交 存储库

    现在假设

    • 远程存储库不是空的,即具有 工作目录,以及
    • 就在推之前,当前的 远程存储库是要推送到的分支
    问题:

    • 在远程存储库中,
      git push
      是否移动分支名称以指向新的提示提交

      或者远程存储库的用户必须运行一些额外的git命令才能移动它

    • 在远程存储库中,
      gitpush
      是否将工作目录更新为与新的tip提交相同

    • 即,在远程存储库中,是更新的版本(通过
      git)
      推送当前分支的当前分支(git push之前的“当前”)仍然是
      git push之后的当前分支?(请注意电流的定义。)
      我在帖子开头说:“现在的分支是
      定义为签出到工作目录中的分支。“)

    如果我从版本控制中正确理解,我的猜测是否定的 Loeliger 2ed的Git中写道:

    回想一下,git push命令不会签出 接收存储库。它只是从源文件传输对象 将存储库发送到接收存储库,然后更新 接收端上的相应参考

    在裸存储库中,这种行为是可以预期的, 因为没有可由更新的工作目录 签出文件。那很好。然而,在一项发展中 作为推送操作的接收者的存储库,它可以在以后 对使用开发存储库的任何人造成混淆

    推送操作可以更新存储库状态,包括头部 犯罪也就是说,即使远程端的开发人员已经完成了 没有任何更改,分支引用和标头可能会更改,变得不同步 使用签出的文件和索引

    在存储库中积极工作的开发人员 异步推送发生时将看不到推送。但随后 该开发人员的提交将发生在意外的头上,从而创建 奇怪的历史。强制推送将丢失另一方的推送提交 开发商该存储库的开发人员也可能会发现自己 无法将其历史记录与上游存储库或 下游克隆,因为它们不再是简单的快进 应该是。她也不知道为什么:存储库一直在默默地 从她下面变出来的。猫和狗将住在一起。 那会很糟糕

  • 在git pull命令中,合并步骤将新获取的远程跟踪分支合并到当前分支中。如果我是正确的,
    git pull
    的合并步骤也会使分支的banch名称前进,以指向分支上新的top commit

    问题:

    • 在本地存储库中,
      git pull
      是否将工作目录更新为与新获取的tip commit相同

    • 即,在本地存储库中,当前分支的更新版本(通过
      git pull
      )在
      git pull
      之后仍然是当前分支吗?(注意我在文章开头给出的当前分支的定义:“当前分支被定义为签出到工作目录中的分支。”)

    我问了一个关于git pull的问题。 据我所知