使用Git可视化工具展示分支拓扑结构

1087

我在自己的机器上独立使用Git,发现很难保持对所有分支和提交的心理模型。我知道可以使用git log查看从当前位置开始的提交历史记录,但是否有一种方法可以查看整个分支拓扑结构,类似于这些似乎被用于解释分支的ASCII地图?

      .-A---M---N---O---P
     /     /   /   /   /
    I     B   C   D   E
     \   /   /   /   /
      `-------------'

我觉得如果有人想要接手我的代码库,他们可能会很难理解其中的细节。

我想我受到了 AccuRev 的 stream browser 的影响...


无法在终端中显示Git树 - Leif Gruenwoldt
1
@leif81,对我来说是半重复。@Masi在他的问题中明确排除了gitk。 - Benjol
这个回答解决了你的问题吗?Pretty git branch graphs - Gonçalo Peres
33个回答

28

我发现git-big-picture非常有用。

它使用dot/Graphviz创建漂亮的二维图形,而不是gitk等工具产生的相对线性和单一维度的视图。使用-i选项可显示分支点和合并提交,但省略它们之间的所有内容。


如果你使用-i选项,它应该可以很好地随着提交数量的增加而扩展,但是如果有复杂的分支和合并,它可能会变得难以阅读(但是这时,哪个工具不会呢)。 - Frank Osterfeld
1
在我们的中等规模项目中,这会生成一个有大量行的巨大图片。我能限制它的深度吗?例如,只显示最近N天的提交。 - Ondra Žižka

27

请看BranchMaster

我编写了此工具以可视化复杂的分支结构,将它们之间的所有提交合并为一行。数字表示提交数量。

这里输入图片描述


2
这正是我想要的。有没有其他命令/工具可以做到这一点? - Aalex Gabi
3
请将以下内容添加至你的git配置文件中,这样在命令行中输入"git gbranch"即可实现同样的效果:gbranch = log --graph --simplify-by-decoration --pretty=format:'%C(yellow)%h%C(white)%d %C(bold black)%ar %C(reset)%n' --all - kracejic
你是如何获取数据来可视化分支的? - Snowfish
我对你的应用程序唯一的不满是它可以工作,但我无法重新定位节点或滚动。 - FilBot3

25

我找到了这篇博客文章,其中展示了一种简洁的方法:

git log --oneline --abbrev-commit --all --graph --decorate --color

我通常为上述命令创建一个别名:

alias gl='git log --oneline --abbrev-commit --all --graph --decorate --color'

仅需使用gl即可。

您还可以将别名添加到Git配置中。 打开文件~/.gitconfig,并将以下行添加到[alias]部分:

[alias]
        lg = log --oneline --abbrev-commit --all --graph --decorate --color

然后像这样使用:

git lg

示例输出:

在此输入图片描述


19

我正在使用Visual Studio Code编辑器,我发现很喜欢由mhutchie开发的Git Graph扩展程序(而且我并不孤单,有100万用户使用这个扩展程序!)。

输入图片描述

如果你也喜欢这个编辑器,只需前往扩展选项卡(左中部的小方格),搜索“Git Graph”并安装即可。

输入图片描述

要使用它,请前往Git控制选项卡并点击“查看Git Graph”按钮。

输入图片描述


很遗憾,https://github.com/mhutchie/vscode-git-graph 项目的主要开发者似乎已经失踪了。该项目自2021年中期以来一直处于休眠状态。有一些尝试推动它向前发展(请参见https://marketplace.visualstudio.com/items?itemName=hansu.git-graph-2),但是mhutchie在许可证中加入了一条使这一行动成为问题的条款。这是一个与GitHub的未解决问题(Q1/23)。另一个选择可能是一个正在成熟的项目,一些人正在考虑 - https://marketplace.visualstudio.com/items?itemName=phil294.git-log--graph - 就我个人而言,我希望mhutchie能够开放许可证。 - Jay M
建议:可能值得一提的是,所有的 vscode-git-graph、git-graph-2 和(我假设)git-log--graph 都不仅仅是可视化工具。它们都完全集成到 VSCode 的 IDE 中,可以用于执行几乎所有日常任务,直接从 GUI 中完成,留下 CLI 用于更不寻常和复杂的任务。Checkin/Checkout/Clone/Merge/Branch/Compare/Revert/Stash git-graph 还支持子模块,我不知道 git-log--graph 是否也支持。 - Jay M

18

还有 Tig。它没有像“BranchMaster”那样折叠分支,但...

它快速,在终端中运行。

因为它如此迅速(+键盘控制),您可以获得极佳的用户体验。它几乎像我的“ls”一样,用于包含Git存储库的目录。

它具有通常的快捷键,例如/进行搜索等。

修订图

(PS:这是屏幕截图背景中的终端。现在看起来更好,但我的计算机拒绝进行屏幕截图,对不起)

(PPS:我也使用GitKraken,它具有非常清晰的可视化效果,但比Tig更重。)


我是一个终端爱好者,Tig(Git的文本界面)是与Git仓库进行交互的好工具,它包括了图形视图和Git历史记录等非常有用的功能。作为Git命令行的额外工具,我向所有终端爱好者推荐使用它。 - hermeslm

18

适用于Mac用户,请查看(无恶意)免费开源工具GitUp

我喜欢图形显示的方式。比我看到的其他工具更清晰。

该项目在GitHub上。

GitUp截图


1
这是唯一一个图表,您可以在其中在x轴上看到分支,y轴上看到时间。非常直观。GitUp绝对令人惊叹!macOS不再是了,所以我正在转向Windows,并且将非常想念GitUp。 - w00t
干得好。哇——不知道“Fixup with Parent”是什么意思。为这些添加工具提示会很棒。 - Stryker

17

Giggle 画出非常好看的图表。


如果您使用OmniGraffle,那么Grittle也是如此。 - New Alexandria
尝试过后,我发现每个提交只有一行,而不是每个分支/标签一行。当你有数十个分支/标签时,这太详细了。 - Aalex Gabi

15

TortoiseGit有一个名为“版本图”的工具。如果你在Windows上,只需右键单击你的代码仓库→Tortoise Git版本图即可轻松使用。


1
太棒了,使用Tortoise Git已经有很长时间了,但是我不知道这个功能。 - kreamik

12

1
这个扩展我觉得有点慢。它也不会自动更新并且看起来不太完善。但它在可视化提交树方面做得很好... - aljazerzen
4
另一个用于 Visual Studio Code 的扩展是 Git Graph,由 mhutchie 开发。我同时使用它和 GitLens。 - Josef.B

12

我使用以下别名。

[alias]
    lol = log --graph --decorate --pretty=oneline --abbrev-commit
    lola = log --graph --decorate --pretty=oneline --abbrev-commit --all

它在颜色方案上提供了比我之前看到的别名更多的信息。而且它似乎相当普遍,因此你可能有机会在别人的环境中找到它或能够在谈话中提到它而无需解释。

还有截图和完整描述见 Git lola


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接