尝试更详细地了解git。在git log的图形输出中,线条和点是什么意思?为什么点的左侧仅为部分点,而右侧仅为另一部分?是因为我从特定分支运行命令吗?它会与主人不同吗?拉动合并是否显示不同?
答案 0 :(得分:3)
星号表示提交和父母子女关系。
所以基本上它意味着你有两个分支(让我们左右调用它们)。你在左边的那个上工作了很多,在右边的那个上工作了,你合并了左边的右边,在右边合并了一个并再次合并。
如果你进行合并,他们会使用一些ASCII艺术来表示正确的一个仍然是活动的。这是我更喜欢tig
语法清晰的原因之一。
答案 1 :(得分:3)
这一点很重要,尤其是在stackoverflow上,因为许多问题和答案将采用代表性图形的形式,如下所示。
每个星号都是一个提交,这些行向下引导到每个父提交。提交也是父提交,如果它紧接在另一个提交之下。
* D (master)
* C
* B
* A
在上面的例子中,A是第一个提交,B是第二个提交,所以 - 祖先是D->C->B->A
。这部分是显而易见的,但是假设您根据B创建了一个分支并添加了一个新的提交。
* D (master)
* C
| * E (dev)
|/
* B
* A
现在我们有两个分支master
和dev
。 D (master)
的祖先为D->C->B->A
,而E (dev)
的祖先为E->B->A
。
如果你看到两条线分开,这意味着这两条线的两次提交都会导致公共提交父级 - 在B
的情况下E
是C
和{{}的父级1}}。
让我们说你继续向dev
分支添加另一个提交,然后决定你准备将dev
合并到master
。
* G (master)
|\
* | D
* | C
| * F (dev)
| * E
|/
* B
* A
上图显示您在F
之后添加了E
提交(请参阅星号的正上方/下方)。然后,您检查了master
分支并合并到dev
。这创建了一个合并提交,这里称为G
。
上面我解释了如何从同一个提交向上分离的线条意味着这些线路引导的位置,两个提交将第一个提交视为它们的共同父节点。但是,在这种情况下,G
有两行将引入它。这意味着它有两个父母。这是合并提交。
在最后的图表中,您会注意到提交(星号)在不同的行上。
* | D (master)
* | C
| * F (dev)
| * E
现在,所有这些提交都合并在一起,但D
和C
是在与F
和E
不同的分支上创建的。星号所在的一侧表示提交所属的分支。 D
是在主分支上创建的,E
是在dev分支上创建的。
这些合并的历史可能会变得非常纠结,它们并不像你现在那样整洁有序。您可以选择关注历史记录的外观,并可能决定尝试通过与--no-ff或--ff-only合并或执行rebase等操作来塑造它。我不会深究这一点,只是说这些是人们可以控制git历史图表看起来的方式(重要的)。
答案 2 :(得分:2)
星星是提交(在右侧),线路连接提交(即,它们显示连接)。