git "git" 显示的提交图与 "gitk" 显示的提交图:这里发生了什么?

git commit graph displayed by "git" vs. displayed by "gitk": what's going on here?

我目前正在查看 SWI Prolog git 存储库(克隆到我的本地计算机)。

为此,我使用

显示提交图
git log --graph --full-history --all --color \
--pretty=format:"%x1b[31m%h%x09%x1b[32m%d%x1b[0m%x20%s"

以及使用gitk

这是 git log 输出的一部分:

如果我对上面的解释正确:

  1. 有一个分支以标记 "V7.4.1" 结尾(提交 df973c8 周围的红圈)。这个分支已经过时了,因为没有对它做进一步的工作。这样对吗?
  2. 同一个分支早一点从 master 分支获得(围绕提交 675a​​4049 的蓝色圆圈出现在 2f745e6 之后)。不过,我当时不明白来回的对角线。他们为什么 "overshoot"?
  3. 如果我与 gitk 的输出(下面的输出)进行比较,以标记 "V7.4.1" 结尾的分支在 gitk 中是完全不可见的。根本没有 2f745e6 ("CLEANUP: allow gcc...") 分支(下图中的红色圆圈),仅显示主分支及其下一次提交 c6b9256,"Updated clib"。有没有办法也看到 "stale" 分支?

Git 中的提交已连接 one-way;提交知道它的 parents 是什么,仅此而已。当 git loggitk 显示图形时,他们必须从某个点、分支或标记或提交开始读取图形。然后他们只能看到那个标签的祖先。默认情况下,gitkgit log 都以这种方式工作并从您当前的提交开始。

但是你用了git log --all。这将从每个分支头和标签开始,并显示可到达的所有内容。它会向您显示每个分支和每个标签及其所有祖先提交。

gitk,相比之下,将从当前提交向后工作。您只会看到当前提交的祖先。 v7.4.1 不是当前提交的祖先,所以它甚至不知道。

比较苹果与苹果:gitk --allgit log --allgitkgit log


There is a branch that ends with the tag "V7.4.1" (red circle around commit df973c8). This branch has become stale as no further work has been done on it. Is this right?

这不是一个分支,它是一个标签。分支和标签都只是指向提交的标签,但标签不应该移动。标签旨在标记单个提交,在本例中为 v7.4.1 版本,因此它们将始终为 "stale"。不要删除它们,它们就在那里,因此您可以找到重要的提交。

The same branch was fed from the master branch a bit earlier (blue circle around commit 675a4049 coming after 2f745e6). I don't understand the back-and-forth diagonal lines at that point though. Why do they "overshoot"?

Git 中的分支是字面上的 分支。您看到的是 Git 绘制这些分支。但它不能总是整齐地放在屏幕上,所以有时它们会交叉。就像俯视高速公路立交桥。

675a4049 是 2f745e6 和其他进一步合并的地方。