Git快进是(严格指针)实际快速反转? Git新手的术语歧义消除

时间:2012-05-30 15:17:44

标签: git terminology reverse fast-forward disambiguation

Git快进合并在TIME方面是FORWARD。指针从旧提交到新提交。

示例(通过ffwd合并主指针从提交D移动到提交G):

在快进合并之前:

                  master
                    |
        A<--B<--B<--D<--E<--F<--G
                                |
                           new_branch

快进合并后:

                              master
                                |
        A<--B<--B<--D<--E<--F<--G
                                |
                           new_branch

但是,由于提交指针从较新指向较旧,严格地说这些指针,分支指针在提交指针的上游向后 ...。所以在这个意义上,它可以被标记为快速反向合并。上游(来自ProGit一书的术语,合并章节)指的是反向流动,即上游,因此将上游流程解释为快进事物可能会使新手感到困惑。所以,它是:

提交指针的上游。

转发提交时间。

这种推理有意义吗?

2 个答案:

答案 0 :(得分:2)

只有在提交遵循箭头的路径时才会出现这种情况。

我认为这让你感到困惑。请记住,箭头指向你来自的地方,而不是你要去的地方。

主指针随时间向前移动并沿着分支向前移动。请记住,HEAD位于分支的最前端。无论何时你向HEAD移动(假设它没有向后移动)你都会及时前进并提交。

现在,如果你想把它想象成一个链表,那么是的,通常A会是头,而G就是尾巴,除了.....我们知道在Git我们的HEAD指向G除此之外,我不认为新手通常会在这个低级别上看它,并尝试将数据结构概念应用于它。

你在想它。

答案 1 :(得分:0)

不,它不会将master移动到“G”。它只是以“G”开头,而ff以“D”开头。 master只是名称/标签的东西(称为ref)。它在合并后更新,而不是逐步“移动”。

要理解这一点,您可以尝试合并冲突。 当合并正在等待手动解析时,分支仍然指向其旧提交。只有结帐树和索引处于不确定状态。

<强>更新 也许你可以用这种方式思考:

  1. 找到合并基础git merge-base D G,这是G
  2. 在G处创建一个假的临时分支(不是真正的分支,但让我们暂时假装这个)。
  3. ff假分支到D.
  4. 将假分支重命名为master,覆盖旧分支。