如何使用 Tig 浏览 Git 日志

Tig 不仅仅是 Git 的文本模式界面。以下介绍它如何增强您的日常工作流程。
195 位读者喜欢这篇文章。
Jump-start your career with open source skills

Opensource.com

如果您使用 Git 作为版本控制系统,您可能已经接受了 Git 是一个复杂工具的事实。它是一个非常棒的工具,但浏览 Git 仓库可能很麻烦。这就是 Tig 这样的工具的用武之地。

摘自 Tig 手册页

Tig 是一个基于 ncurses 的 git(1) 文本模式界面。它主要用作 Git 仓库浏览器,但也可以在块级别协助暂存更改以进行提交,并充当各种 Git 命令输出的分页器。

这基本上意味着 Tig 提供了一个您可以在终端中运行的基于文本的用户界面。Tig 使浏览您的 Git 日志变得容易,但它的功能远不止在您最近的提交和之前的提交之间跳转。

default tig

本 Tig 快速入门中的许多示例直接摘自其出色的手册页。我强烈建议阅读它以了解更多信息。

安装 Tig

  • Fedora 和 RHEL:sudo dnf install tig
  • Ubuntu 和 Debian:sudo apt install tig
  • MacOS:brew install tig

请参阅官方安装说明以获取更多选项。

浏览当前分支中的提交

如果您想浏览分支中的最新提交,请输入

tig

就这样。这个三字符命令将启动一个浏览器,您可以在其中浏览当前分支中的提交。您可以将其视为 git log 的包装器。

要导航输出,您可以使用向上和向下箭头键在提交之间移动。按回车/Enter 键将打开一个垂直拆分,右侧显示所选提交的内容。您可以继续在左侧浏览提交历史记录,您的更改将显示在右侧。使用 kj 逐行向上和向下导航,使用 - 和空格键在右侧上下翻页。使用 q 退出右侧窗格。

tig 输出上搜索也很简单。在左右窗格上使用 / 向前搜索,使用 ? 向后搜索。

commit tig

这些足以让您开始导航提交。这里有太多的快捷键无法全部涵盖,但单击 h 将显示一个帮助菜单,您可以在其中发现其导航和命令选项。您也可以使用 / 和 ? 搜索帮助菜单。使用 q 退出帮助。

help tig

浏览单个文件的修订

由于 Tig 是 git log 的包装器,因此它方便地接受可以传递给 git log 的相同参数。例如,要浏览单个文件的提交历史记录,请输入

tig README.md

将此与被包装的 Git 命令的输出进行比较,以更清楚地了解 Tig 如何增强输出。

git log README.md

要在原始 Git 输出中包含补丁,您可以添加 -p 选项

git log -p README.md

如果您想将提交范围缩小到特定日期范围,请尝试类似这样的操作

tig --after="2017-01-01" --before="2018-05-16" -- README.md

同样,您可以将此与原始 Git 版本进行比较

git log --after="2017-01-01" --before="2018-05-16" -- README.md

浏览谁更改了文件

有时您想找出谁更改了文件以及原因。命令

tig blame README.md

本质上是 git blame 的包装器。正如您所期望的,它允许您查看最后编辑给定行的人是谁,并且还允许您导航到引入该行的提交。这有点像 Vim 的 vim-fugitive 插件提供的 :Gblame 命令。

浏览您的暂存区

如果您像我一样,您可能在暂存区中堆积了很多编辑。很容易忘记它们。您可以通过以下方式查看暂存区中的最新项目: 

git stash show -p stash@{0}

您可以通过以下方式找到倒数第二个最近的项目

git stash show -p stash@{1}

等等。如果您可以在需要时回忆起这些命令,那么您的记忆力比我好得多。

与上面的 Git 命令一样,Tig 可以通过一个简单的调用轻松增强您的 Git 输出

tig stash

尝试在具有已填充暂存区的仓库中发出此命令。您将能够浏览和搜索您的暂存区项目,让您快速了解您为不时之需保存的所有内容。

浏览您的引用

Git 引用是您已提交内容的哈希值。这包括文件和分支。使用 tig refs 命令允许您浏览所有引用并向下钻取到特定提交。

tig refs

完成后,使用 q 返回上一个菜单。

浏览 git 状态

如果您想查看哪些文件已暂存以及哪些文件未跟踪,请使用 tig status,它是 git status 的包装器。

status tig

浏览 git grep

您可以使用 grep 命令在文本文件中搜索表达式。命令 tig grep 允许您导航 git grep 的输出。例如

tig grep -i foo lib/Bar

将导航对 lib/Bar 目录中 foo 进行不区分大小写搜索的输出。

通过 STDIN 将输出管道传输到 Tig

如果您要将提交 ID 列表管道传输到 Tig,则必须使用 --stdin 标志,以便 tig show 从 stdin 读取。否则,tig show 将在没有输入的情况下启动(呈现空白屏幕)。

git rev-list --author=olaf HEAD | tig show --stdin

添加自定义绑定

您可以使用 rc 文件自定义 Tig。以下是如何根据您的喜好配置 Tig,使用添加一些有用的自定义按键绑定的示例。

在您的主目录中创建一个名为 .tigrc 的文件。在您喜欢的编辑器中打开 ~/.tigrc 并添加

# Apply the selected stash
bind stash a !?git stash apply %(stash)

# Drop the selected stash item
bind stash x !?git stash drop %(stash)

运行 tig stash 以浏览您的暂存区,如上所述。但是,在设置这些绑定后,您可以按 a 将暂存区中的项目应用到您的仓库,按 x 从暂存区中删除项目。请记住,您需要在浏览暂存区列表时执行这些命令。如果您正在浏览暂存区项目,请输入 q 以退出该视图,然后按 ax 以获得您想要的效果。

有关更多信息,您可以阅读有关 Tig 快捷键绑定的更多信息。

总结

我希望这篇演示文稿对您有所帮助,展示了 Tig 如何增强您的日常工作流程。Tig 可以做更多强大的事情(例如暂存代码行),但这超出了本入门文章的范围。这里有足够的信息让您开始使用,但仍有更多内容值得探索。

接下来阅读什么
标签
User profile image.
父亲,黑客,偶尔的吉他手和歌手。Olaf 是 MetaCPAN 项目的创始人。他的博客是 http://olafalders.com。

4 条评论

感谢您的分享!我认为更多有助于查看 git 日志等相当简单任务的工具应该是基于终端的,而不需要像 rust 或 docker 或 go 这样的疯狂依赖项。

不错的工具。感谢分享!:)

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.