揭开这个 git 日志图的神秘面纱

Demystify this git log graph

请帮助我理解为什么 git 日志显示额外的紫线用于合并到开发分支。

我们使用 gitflow,所以蓝线代表直接提交开发。黄线是我们在发布中合并的主分支。其他行是版本或修补程序。

在这种情况下,亮绿色线是从 master 分支创建的修补程序。在 hotfix 分支上有一个提交,然后是 "finished"(即合并到 develop 和 master)。 master 中的合并提交对我来说很有意义,因为我看到亮绿色线合并到黄色(master)线中。对我来说没有意义的是粉红色线的引入,它显示了修补程序分支合并到开发分支中。我希望明亮的绿线终止于蓝线。该图使 develop 看起来像是在 "Throw exception" 提交时分支,而实际上它不是。

git 日志看起来很相似(那里有一条深蓝色的线很难看)。

我有一个理论,但我希望得到证实。当我在本地提交更改 "Added Raygun integration" 时,有一个未完成的更改,我没有从源(热修复集成)中获取和合并。我认为粉线显示出分歧,因为 "Added Raygun integation" 提交是在我合并热修复提交之前。当我将 origin 合并到我的本地并推送时,开发分支被重新整合。如果是这种情况,如果我先从原点提取未完成的提交,然后提交我的更改,“合并分支 'hotfix/2.5.1' 提交是否会显示合并到蓝线?

你的理论是正确的。除了说在git中,"branch"这个词是有歧义的:还有分支names,比如developmasterhotfix/2.5.1,然后是通过绘制提交图获得的分支和合并线。分支 name 只是将特定提交标识为 "the tip commit for that branch",但该提交也可能在任意数量的其他分支上。合并只是添加一个新的提交,将行拉回到至少两个现有的提交。

这些自动 graph-drawers 喜欢为辅助合并线分配新颜色。也就是说,他们选择合并的一侧("first parent" 侧)作为 "main" 行,并在之前的提交中保留该颜色,但另一侧使用不同的颜色。由于那里有一个额外的合并,你会得到一个额外的颜色。