git graph 线条和星号代表什么?

Cos*_*sta 4 git git-log

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

在此处输入图片说明

edd*_*oya 8

知道这一点很重要,尤其是在 stackoverflow 上,因为许多问题和答案将采用代表性图表的形式,就像我下面的图表一样。

每个星号是一个提交,向下引导到每个父提交的行。一个提交也是一个父提交,如果它紧邻另一个提交。

* D (master)
* C
* B
* A
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,A 是第一个提交,B 是第二个,依此类推——祖先是D->C->B->A. 这部分很明显,但假设您基于 B 创建一个分支并添加一个新提交。

* D (master)
* C
| * E (dev)
|/
* B
* A
Run Code Online (Sandbox Code Playgroud)

所以现在我们有两个分支master, 和dev。祖先为D (master)D->C->B->A,祖先为E (dev)E->B->A

当你看到两行裂开,这意味着两次提交这些行导致双方认为,共同致力于父母-在上述情况下B是父母双方EC

假设您然后继续向dev分支添加另一个提交,然后决定您已准备好合并devmaster.

* G (master)
|\
* | D 
* | C
| * F (dev)
| * E
|/
* B
* A
Run Code Online (Sandbox Code Playgroud)

上图显示您在F之后立即添加了提交E(查看星号如何直接在彼此上方/下方)。然后,您检查了master分支并合并到dev. 这创建了一个合并提交,这里称为G.

上面我解释了从同一个提交向上分离的行如何意味着这些行的引导,两个提交将第一个视为它们的共同父级。然而,在这种情况下,G有两行领导它。这意味着它两个父母。这是一个合并提交

在最后一张图中,您会注意到提交(星号)位于不同的行上。

* | D (master)
* | C
| * F (dev)
| * E
Run Code Online (Sandbox Code Playgroud)

所有这些现在提交合并到一起,而是DC在不同的分支比创建FE。星号所在的一侧表示提交属于哪个分支。D在 master 分支E上制作,在 dev 分支上制作。

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


Wil*_*sem 5

星号表示提交,行表示父子关系。

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

如果您进行合并,他们会使用一些 ASCII 艺术来表示正确的仍然处于活动状态。这就是我更喜欢tig谁的语法更简洁的原因之一。