4

我们的团队是 git 新手(我们更像是一个 svn 商店)。我们试图弄清楚这些概念,但有时我们会看到奇怪的结果。

例如,这是来自 GitKraken 的屏幕截图:

Git Kraken 截图

蓝线是master分支,为什么这里有空隙?哪个 git 命令可以重现这个,这样做有什么问题吗?

4

3 回答 3

4

线条及其颜色不直接对应于分支。分支只是指向提交的指针。mkrieger1s answer中的链接详细讨论了这一点。

您的图表非常好,您只是在阅读/解释错误。每个大点(上面有头像)都是一个提交,每个提交都只有一个父提交。每个小点都是一个合并提交,每个提交都有两个父节点。

中间的大结是与两个父提交的合并提交(从下方到达结的行);合并提交本身是另外三个提交(在合并本身之上的提交)的父级。

您可以在 git 存储库的每个图形表示中看到这一点,这非常好。

于 2017-03-06T13:35:58.873 回答
1

蓝线不是您的主分支。提交不属于任何特定的分支。在 Git 中,你的历史是一个 DAG(有向无环图)。分支和标签只是贴在您喜欢的任何提交上的便利贴,与真正的便利贴一样,您可以剥离分支或标签标记并将其粘贴到您喜欢的任何其他提交上(不一定是已经推送的最佳主意历史,但对于纯本地的东西完全合法)。分支 post-it 和 tag post-it 之间的唯一区别是,如果您已签出分支(实际上是分支,而不仅仅是分支指向的提交),则分支 post-it 会自动移动到新提交,可能有多个分支 post-it 指向同一个提交)并创建一个新的提交。

因此,如果左上角的浅蓝色线是您的主分支的一部分,那么两个红色提交(但不是图像上方的新提交)以及右下角的粉红色提交和左下角的浅蓝色和深蓝色提交也是如此.

于 2017-03-06T13:33:06.117 回答
0

我将尝试解释图像并按颜色命名分支,将圆圈/头像称为“提交”,将线条相交的点称为“节点”。

在此处输入图像描述

  1. 第一个红色节点从第一个蓝色节点中提取了最新的提交(假设它是你的主分支)
  2. 在红色分支上的两次提交和洋红色分支上的两次提交之后,粉红色拉动了红色和洋红色分支上的最新提交以合并它们。所以右边的第一个节点是两个分支合并时的最新提交。
  3. 在第一个节点之后,线变为蓝色,然后回到左侧(在可见的 master/blue 分支的第一次提交上垂直对齐)。第二个节点(蓝色)表示粉红色的合并提交现在得到 PR 并合并到主节点。左边的第二个节点(蓝色)只是主分支上的合并提交,由粉红色 PR'ed。
  4. 有人从 master(深蓝色)分支出来,还从粉红色中提取了最新的提交。Pink 继续在自己的分支上,在合并 PR 之后推送了一次 commit,也就是深蓝色拉取的 commit。深蓝色和粉红色之间没有合并提交,因为深蓝色在从 master 分支后没有先前的提交。
  5. 但是在深蓝色从粉红色中拉出之前,有人直接推动了蓝色/主,而深蓝色在深蓝色拉出粉红色的最新提交的那个点上没有那个头。
于 2020-06-30T05:57:45.427 回答