git 中的快进和变基

Fast-forwarding and rebase in git

我正在阅读 this 并且大部分我都明白了。我想我理解变基(它获得了更线性的 git 日志历史记录,而不必进行只是三向提交的提交)我也认为我理解 git 图。但是这段话有几个词我没看懂。

You’ll notice the phrase “fast-forward” in that merge. Because the commit pointed to by the branch you merged in was directly upstream of the commit you’re on, Git simply moves the pointer forward. To phrase that another way, when you try to merge one commit with a commit that can be reached by following the first commit’s history, Git simplifies things by moving the pointer forward because there is no divergent work to merge together – this is called a “fast-forward.”

Your change is now in the snapshot of the commit pointed to by the master branch, and you can deploy the fix.

不明白的是upstream、pointer、最后一句这几个词

在图中,为什么红色主框在修复程序上方?

Upstream

git的一个重要方面是它是分布式的,而分布式很大程度上意味着系统中没有固有的"upstreams"或"downstreams"。这仅仅意味着没有绝对的上游回购或下游回购。

这些概念在两个存储库之间始终是相对的,并且取决于数据流动的方式:

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

您正在从上游“companyRepo”拉取(“companyRepo”是 "upstream from you",而您是 "downstream for companyRepo")。 您正在向上游推送(“companyRepo”仍然是 "upstream",信息现在返回到那里)。 注意 "from" 和 "for":你不仅仅是 "downstream",你是 "downstream from/for",因此是相对的方面。

Pointer

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

在Git的世界里,很多实现实际上都是用Pointers的概念建模和开发的。

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

In the diagram, why is the red master box above hotfix?

我们只关注 fast-forward

的解释

when you try to merge one commit with a commit that can be reached by following the first commit’s history, Git simplifies things by moving the pointer forward because there is no divergent work to merge together – this is called a “fast-forward.”

图表和解释试图解释,当你创建一个新分支时,你拥有最后一个分支的所有提交历史。现在您继续在新分支上工作,例如进行 3 次新提交。与最后一个分支合并时,git 不必将所有新分支的提交历史复制回去。相反,它只需复制三个新提交并将 HEAD 指针移动三个提交即可完成合并。这就是所谓的快进机制。

master 红框包含到 hotfix 的新分支创建时的所有历史记录。现在当合并发生时,master 和 hotfix 都指向同一个提交。

主红框实际上在时间上比修补程序更早,并且是 hotfix 分支创建的参考点。