git graph 中的线条和星号表示什么?

问题描述 投票:0回答:4

尝试更详细地了解 git。 git log的图形输出中,线和点是什么意思?为什么部分的点只在左边,而另一部分的点只在右边?是因为我从特定分支运行命令吗?大师的形式会有所不同吗?拉取合并的显示是否有所不同?

enter image description here

git git-log
4个回答
12
投票

了解这一点很重要,尤其是在 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
的父项。

假设您继续向

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
是在 master 分支上创建的,
E
是在 dev 分支上创建的。

这些合并的历史可能会变得非常纠缠,它们并不总是像你现在这样整洁有序。您可能选择关心您的历史记录的外观,并可能决定尝试通过执行诸如与 --no-ff 或 --ff-only 合并或执行变基之类的操作来塑造它。我不会讨论这个,只是说这些是人们可以控制 git 历史图的外观的方法(这很重要)。


5
投票

所以基本上这意味着你有两个分支(我们称它们为左分支和右分支)。你在左边做了很多工作,接下来在右边做了很多工作,你将右边合并到左边,在右边做了进一步的工作,然后再次合并。

如果您进行合并,他们会使用一些 ASCII 艺术来表示正确的那个仍然处于活动状态。这就是我更喜欢

tig

语法更清晰的原因之一。

    


2
投票


0
投票

当我们从主干分支时 - 分支走向哪一侧?有什么意义吗?

© www.soinside.com 2019 - 2024. All rights reserved.