跳至内容
GitTree

Git 指南

Git 树可视化工具和查看器:如何以图表形式查看 Git 历史记录

以树形式查看 Git 历史记录的三种方法:终端中的 git 日志图、gitk 和可单击的 GUI 提交图。然后学习读取通道和合并并找到您需要的提交。

撰写者 Kodmora已更新 阅读 3 分钟
GitTree 提交图,包含颜色编码的分支通道、分支和标签标签、参考侧边栏和提交详细信息面板

Git 树可视化工具 将您的提交历史记录绘制为图表:每个点都是一次提交,每条彩色线都是一个分支,在一个点处相遇的两条线是合并。 Git 本身有两个:在任何终端中运行 git log --graph --oneline --all --decorate,或打开 gitk --all。当您需要历史记录时,您可以点击、过滤和搜索,使用 GUI 提交图表,例如针对 macOS、Windows 和 Linux 的 GitTree,桌面 Git 客户端。

本指南将介绍这三者,然后展示如何读取通道和合并提交,以及如何在数千个提交中查找一个提交。简短的披露:GitTree 的制作者编写了它。命令行和 gitk 部分只需要 Git。

Git 日志图:Git 中已内置的树视图

最快的 Git 树视图是一个命令。它可以通过 SSH 在任何存储库中以及运行 Git 的每个系统上运行:

git log --graph --oneline --all --decorate
  • --graph 绘制分支的文本图并合并到每个提交的左侧。它还对提交进行排序,以便父级不会出现在其子级之前。
  • --oneline 每次提交打印一行:短哈希和消息的第一行。
  • --all 显示每个分支、远程分支和标记以及 HEAD,而不仅仅是您所在的分支。如果没有它,未合并到当前分支的分支将保持隐藏状态。
  • --decorate 在它们指向的提交旁边打印分支和标记名称。当输出发送到终端时,Git 已经执行了此操作,因此当您通过管道传输输出或更改了 log.decorate 时,该标志最重要。

输出看起来像这样。最新的提交位于顶部,* 标记提交,|、\ 和 / 字符是分支行:

*   a1b2c3d (HEAD -> main) Merge branch 'feature/search'
|\
| * 9f8e7d6 (feature/search) Highlight matched terms
| * 5c4b3a2 Add search index
* | 1a2b3c4 Fix typo in README
|/
* 0f9e8d7 (tag: v1.0.0) Release 1.0.0

从下往上阅读:v1.0.0 被发布,然后两行工作并行运行(main 上的自述文件修复,其自己分支上的搜索功能),顶部的合并再次将它们连接起来。

将其保存为短别名

没有人愿意每次都输入四个标志。 Git 别名将整个命令变成 git tree:

git config --global alias.tree "log --graph --oneline --all --decorate"
git tree

四种值得了解的变化

git log --graph --oneline --first-parent main
git log --graph --oneline --all --simplify-by-decoration
git log --graph --oneline main..feature/search
git log --graph --pretty=format:"%h %an %ar %s"
  1. --first-parent 仅跟随每个合并的第一个父级,因此 main 读取为落在其上的内容的直接列表,每个功能一个合并。
  2. --simplify-by-decoration 仅保留分支或标记指向的提交:Git 分支树的轮廓,而不保留其间的提交。
  3. main..feature/search 显示 feature/search 上尚未在 main 中的提交,这是合并将带来的内容。
  4. --pretty=format 将作者和相对日期(“3 天前”)添加到每一行。

gitk:Git 附带的 Git 历史记录查看器

gitk 是 Git 自己的图形存储库浏览器,用 Tcl/Tk 编写。它绘制提交图,显示每个提交的详细信息并列出每个修订版中的文件。从存储库内部启动它:

gitk --all

gitk 接受与 git log 相同的限制,因此您可以将其缩小到时间范围或文件夹。这仅打开 src/ 下最近两周的更改:

gitk --since="2 weeks ago" -- src/

如果您的 shell 回答 gitk: command not found,则您的 Git 安装将其遗漏。在 Debian 和 Ubuntu 上,gitk 是一个单独的包:

sudo apt install gitk

gitk 是为阅读历史而构建的。它的右键菜单中有一些提交操作,但提交属于它的同级工具 git gui,根据它自己的文档,它不显示项目历史记录。对于日常工作,您最终会在两个窗口和终端之间切换。

GUI 提交图:您可以单击的 Git 树视图

桌面 Git 客户端绘制同一棵树,但每一行都是实时的。选择一个提交以查看其消息、父级和更改的文件。右键单击它可以创建分支、挑选或恢复。双击分支标签将其检出,或将一个分支拖到另一个分支上以合并或变基。在 GitTree 中,提交图是主窗口而不是单独的查看器。

GitTree 的提交图:每个分支都有自己的彩色通道,分支和标签标签位于左侧,所选提交的详细信息和文件位于右侧。
GitTree 的提交图:每个分支都有自己的彩色通道,分支和标签标签位于左侧,所选提交的详细信息和文件位于右侧。

以下是 GitTree 在图表上绘制的内容(除了点和线之外):

  • 每个分支的颜色编码通道,在它们指向的提交上带有本地、远程和标签标签。
  • 最新提交上方的 // WIP 行表示您尚未提交的更改,以及图表上在提交时绘制的每个存储。
  • 签名提交上的作者头像和签名徽章。
  • 连接 GitHub、GitLab、Bitbucket 或 Azure DevOps 后,在分支提示上拉取请求和 CI 检查芯片。
  • 平滑滚动超过 100,000 次提交(在 Linux 上测量),因此大型历史记录仍然可用。

GitTree 运行计算机上已安装的 Git(版本 2.39 或更高版本),因此每个按钮都会执行匹配命令的操作。如果您仍在两种风格之间做出选择,我们对使用 Git GUI 与命令行 的比较涵盖了权衡。

如何阅读 Git 提交图:通道、分叉和合并

无论图形在终端中是 ASCII 还是在窗口中是彩色的,都适用相同的规则:

读取 Git 提交图
你所看到的这意味着什么
一个点(终端中的 *)一次提交。较新的提交高于较旧的提交。
垂直线或车道开发线:在一个分支上依次提交。
一条分开的线有人从该提交开始了一个分支,并且工作在两个地方继续进行。
两条线交汇于一点合并提交。它有两个父母,每一系各有一个。
标签,例如 main、origin/main 或 v1.0.0本地分支、远程分支或指向该提交的标记。 HEAD -> 标记您已签出的内容。
一条直线,没有岔路线性历史,通常来自快进合并或合并前的变基。

读取合并提交

合并提交有两个父项。第一个父级是您合并时所在的分支,通常是 main。第二个是您合并的分支。这就是为什么 --first-parent 给出了 main 如此清晰的摘要:它跳过了每个功能分支的内部。在 GitTree 中,选择一个合并,详细信息面板会列出两个父哈希。

在 GitTree 的浅色主题中选择的合并提交:详细信息面板显示父文件和合并更改的文件。
在 GitTree 的浅色主题中选择的合并提交:详细信息面板显示父文件和合并更改的文件。

当车道交叉并且画面变得繁忙时

来回合并的长寿树枝使车道交叉。没有任何东西被破坏;屏幕上显示的内容超出了您的需要。把它砍到你关心的树枝上。在终端中,为它们命名,而不是使用 --all,例如 git log --graph --oneline main feature/search。在 GitTree 中,右键单击分支标签并选择 在图表中隐藏、在图表中单独显示 以仅显示该分支,或 固定到左侧 以将其泳道保留在第一列中。

搜索 Git 历史记录:在数千个提交中查找一个提交

看到树就成功了一半。另一半是找到更改您正在调试的内容的提交。

从命令行搜索

git log --oneline --author="Jane"
git log --oneline --since="2 weeks ago" -- src/
git log --oneline -S"parse_header"
git log --oneline -G"fn [a-z_]+_header"
  • --author 保留作者姓名或电子邮件与模式匹配的提交。
  • --since 和 --until 按日期限制,而 -- src/ 仅保留触及该路径的提交。
  • -S,“镐”,查找添加或删除字符串的提交。这是了解函数何时出现或消失的最快方法。
  • -G 查找添加或删除的行与正则表达式匹配的提交。坚持使用 POSIX 括号表达式,例如 [a-z_] 或 [[:alnum:]]:像 \w 这样的快捷方式并不适用于每个 Git 版本。

在 GitTree 中搜索作者:、文件:并更改:

图表上方的搜索(搜索加载历史记录)与消息、作者、哈希、分支或标签匹配。要进行更深入的搜索,请使用 Ctrl+Shift+P(在 Mac 上为 ⌘+Shift+P)打开命令面板,输入 #,然后输入您的查询。没有前缀的单词搜索提交消息,这些前缀缩小了结果范围:

  • author:jane 或 author:"Jane Doe":作者姓名或电子邮件包含该文本。
  • file:src/main.rs:提交触及该路径。重复此操作以匹配多个路径。
  • change:parse_header:提交添加或删除该字符串,如 git log -S。
  • change:/fn [a-z_]+_header/:更改的行与正则表达式匹配,例如 git log -G。

将它们合并到一个查询中:#fix crash author:jane file:src/ 查找 Jane 提到“修复崩溃”的提交并触摸 src/。要缩小图表本身而不是列出结果,请使用 Filter Graph… 仅保留一位作者、日期范围或路径。

GitTree 命令面板:输入 # 搜索提交,输入 @ 搜索分支和标签,或输入 : 搜索文件。
GitTree 命令面板:输入 # 搜索提交,输入 @ 搜索分支和标签,或输入 : 搜索文件。

在 GitTree 中查看您的 Git 树

  1. 安装GitTree

    下载 GitTree macOS、Windows 或 Linux 并安装。确保安装了 Git 2.39 或更高版本(在 Windows 上,这意味着 Git for Windows); Ubuntu 22.04 附带较旧的 Git,因此首先在 Ubuntu 上升级 Git。

  2. 登录并开始

    当 GitTree 打开时,使用 GitTree 帐户登录,该帐户是通过您的电子邮件或 Git 提供商在 gittree.app 上创建的:图表和所有其他 Git 功能都属于免费套餐。托管集成(GitHub、GitLab、Bitbucket 和 Azure DevOps,包括私有遥控器)和 AI 助手 Nour 随 GitTree Pro 一起提供,从免费试用开始;免费计划在此之后继续进行。

  3. 打开或克隆存储库

    在开始页面上,选择“打开”并选择一个包含 Git 存储库的文件夹,或者选择“克隆”以通过 HTTPS 或 SSH 从 URL 复制一个文件夹。

  4. 阅读图表

    提交图填满了主窗口:最新的提交位于顶部,每个分支一个彩色通道,分支和标签的标签。单击任何提交即可查看其消息、父级和更改的文件。

  5. 聚焦和搜索

    右键单击分支标签以隐藏、单独或固定它,使用过滤器图表…作为作者、日期范围或路径,然后在命令面板中输入 # 以使用 author:、file: 或 change: 进行搜索。

您应该使用哪种 Git 树可视化工具?

可视化 Git 历史记录的三种方法
选项最适合你需要什么
git log --graph快速查看、SSH 会话、脚本和 CI 日志仅限 Git
吉特克Git 套件本身的可点击图表Git(在 Debian 和 Ubuntu 上,单独的 gitk 包)
GitTree在一个窗口中阅读、搜索和更改历史记录GitTree(每个 Git 功能的免费计划,使用 GitTree 帐户;使用 Nour 专业版)和 Git 2.39 或更新版本

大多数开发人员最终都会使用不止一个:用于快速查看的终端、用于挖掘历史记录和更容易查看的编辑的 GUI,例如 GUI 中的交互式 rebase。如果您不熟悉分支和提交,请从我们的 Git 初学者指南 开始,然后在免费课程 阅读提交、HEAD 和修订范围 中练习阅读历史记录,并在 保持分离工作 中了解什么是分离 HEAD。如果您想比较桌面应用程序,请参阅我们对最佳 Git GUI 客户端 的综述。

GitTree 有一个免费计划,涵盖所有 Git 功能,包括私有存储库,而 Nour 是 AI 助手,随 GitTree Pro 一起提供。请参阅提交图和应用程序其余部分可以执行的所有操作,或阅读 Mac、Windows 和 Linux 的安装说明。

常见问题

什么是 Git 树可视化工具?

Git 树可视化工具是一种将存储库的提交历史记录绘制为图表而不是平面列表的工具。每个提交是一个点,每个分支是一条线,合并显示线的连接处。 Git 包括两个:终端的 git log --graph 命令和 gitk 窗口。桌面 Git 客户端(例如 GitTree)添加了可点击、可搜索的图表。

如何在终端中查看 Git 分支树?

在存储库内运行 git log --graph --oneline --all --decorate。 --graph 绘制分支线,--oneline 将每次提交保留在一行,--all 包括每个分支和标记而不仅仅是当前分支,--decorate 打印分支和标记名称。使用 git config --global alias.tree "log --graph --oneline --all --decorate" 将其保存为别名,然后输入 git tree。

为什么 git log 不显示我的所有分支?

默认情况下,git log 仅列出可从 HEAD 访问的提交,即您已签出的提交。未合并到当前分支的分支将被排除。添加 --all 以包含每个本地分支、远程分支和标记,或命名所需的分支,例如 git log --graph main feature/search。

gitk 是和 Git 一起安装的吗?

gitk 是 Git 套件的一部分,因此许多安装都包含它。一些 Linux 发行版单独打包它:在 Debian 和 Ubuntu 上,使用 sudo apt install gitk 安装它。使用 gitk --all 从存储库内部启动它以查看每个分支。它接受与 git log 相同的日期和路径限制,例如 --since 或 -- src/。

如何找到添加特定代码行的提交?

使用镐搜索。 git log -S"text" 列出了更改了该确切字符串出现次数的提交,其中显示了该字符串的添加和删除时间。 git log -G"regex" 与正则表达式匹配添加或删除的行。在 GitTree 中,打开命令面板,输入 # 并使用 change:text 或 change:/regex/ 进行相同的搜索。

GitTree 是免费的吗?它在哪些系统上运行?

GitTree 有一个免费计划,涵盖所有 Git 功能,适用于个人和组织、私人存储库和商业用途,没有时间限制,也无需信用卡。 Nour,AI 助手,附带 GitTree Pro;定价页面比较了两个计划。它在 macOS 13 或更高版本、64 位 Windows 10 和 11 以及 64 位 Linux(Ubuntu 22.04 或更高版本、Debian 12 或更高版本)上运行。它要求您使用 GitTree 帐户登录并使用计算机上已安装的 Git,版本 2.39 或更高版本; GitTree 托管集成需要 Pro。

Git 图形查看器可以处理非常大的存储库吗?

终端图可以处理任何大小,但分支较多时会变得难以阅读;使用分支名称、--since 或路径对其进行限制。 GitTree 的提交图表在 Linux 上的测量中平滑滚动超过 100,000 次提交,您可以隐藏、单独或固定分支,并按作者、日期或路径进行过滤,以保持大量历史记录的可读性。

来源

有关其他产品的声明已根据其位于 2026年10月22日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。