上游的
git 的一个重要方面是它是分布式的,而分布式很大程度上意味着系统中没有固有的“上游”或“下游”。这仅仅意味着没有绝对的上游回购或下游回购。
这些概念在两个存储库之间始终是相对的,并且取决于数据流动的方式:
如果“ myLocalRepo
”已将“ ”声明companyRepo
为远程,则:
你是从上游“ companyRepo
”拉的(“ companyRepo
”是“你的上游”,你是“下游的companyRepo
”)。您正在推送到上游(“ companyRepo
”仍然是“上游”,信息现在返回到那里)。请注意“来自”和“为”:您不仅仅是“下游”,您是“来自/为下游”,因此是相对方面。
指针
它实际上具有相同的含义,就像它在计算机编程中一样。指针是内存中地址的指示符。
在 Git 世界中,许多实现实际上是用Pointers
.
例如,HEAD
它是一个实际的指针,它始终指向您已签出到的当前分支上的最后一次提交。这同样适用于tags
和reflog
结果。
在图中,为什么 hotfix 上方的红色主框是?
让我们只专注于解释fast-forward
当您尝试将一个提交与通过遵循第一个提交的历史可以到达的提交合并时,Git 通过将指针向前移动来简化事情,因为没有不同的工作可以合并在一起——这被称为“快进”。< /p>
图表和解释试图解释,当你创建一个新分支时,你拥有最后一个分支的所有提交历史。现在您继续在新分支上工作,例如进行 3 次新提交。与最后一个分支合并时,git 不必将所有新的分支提交历史复制回来。相反,它只需复制三个新提交并将HEAD
指针移动三个提交即可完成合并。这称为快进机制。
红色框包含了创建master
新分支之前的所有历史记录。hotfix
现在,当合并发生时,master 和 hotfix 都指向同一个提交。
主红框实际上在时间上比修补程序更早,并且是hotfix
分支创建的参考点。