git中的快速转发和rebase

时间:2016-03-09 05:35:26

标签: git git-branch git-bash upstream-branch

我正在阅读this,在大多数情况下,我明白了。我认为我理解变基(它获得了更线性的git日志历史,而不必进行只是三方提交的提交)我也认为我理解git图。但是我不明白的段落中有几句话。

  

你会注意到合并中的短语“快进”。因为   你合并的分支指向的提交是直接的   你正在进行的提交的上游,Git只是向前移动指针。换句话说,当您尝试合并一个提交时   通过遵循第一个提交可以达到提交   历史,Git通过向前移动指针简化了事情,因为   合并在一起没有不同的工作 - 这被称为a   “快进”。

     

您的更改现在位于主分支指向的提交的快照中,您可以部署修复。

我不明白的是上游,指针和最后一句话。

在图中,为什么红色主框上面有修补程序?

1 个答案:

答案 0 :(得分:3)

  

<强>上游

git的一个重要方面是它是分布式的,并且分布很大意味着系统中没有固有的“上游”或“下游”。这仅仅意味着没有绝对的上游回购或下游回购。

这些概念在两个回购之间总是相对的,取决于数据的流动方式:

如果“myLocalRepo”已将“companyRepo”声明为远程,则:

你是从上游“companyRepo”(“companyRepo”是“你的上游”),你是“companyRepo的下游”。 你正在向上游推进(“companyRepo”仍然是“上游”,现在信息可以回到上游)。 注意“从”和“为”:你不只是“下游”,你是“下游/为”,因此相对方面。

  

<强>指针

它实际上与计算机编程中的含义相同。指针是内存中地址的指示符。

在Git世界中,许多实现实际上是以Pointers的概念建模和开发的。

例如,作为实际指针的HEAD始终指向您已检出的当前分支上的最后一次提交。这同样适用于tagsreflog结果。

  

在图中,为什么红色主框上面有修补程序?

让我们只关注fast-forward

的解释
  

当你尝试将一个提交与可以通过遵循第一个提交的历史记录到达的提交合并时,Git通过向前移动指针来简化事情,因为没有不同的工作要合并在一起 - 这被称为“快进” 。”

图表和解释试图解释,当您创建新分支时,您拥有最后一个分支的所有提交历史记录。现在,您继续在新分支上工作,例如进行3次新提交。当与最后一个分支合并时,git不必复制所有新的分支提交历史记录。相反,它只需要复制三个新提交并将HEAD指针移动三次提交以完成合并。这称为快速转发机制。

master红色框包含创建hotfix的新分支之前的所有历史记录。现在当合并发生时,主服务器和修补程序都指向同一个提交。

主红框实际上是按时间顺序旧于修补程序和hotfix分支创建的参考点。