如果您使用 Git 作为版本控制系统,您可能已经接受了 Git 是一个复杂的工具这一事实。 它是一个很棒的工具,但是浏览 Git 仓库可能会很麻烦。 这就是像 Tig 这样的工具发挥作用的地方。
来自 Tig 手册页
Tig 是一个基于 ncurses 的 git(1) 文本模式界面。 它主要用作 Git 仓库浏览器,但也可以在块级别协助暂存更改以进行提交,并用作各种 Git 命令输出的分页器。
这基本上意味着 Tig 提供了一个您可以在终端中运行的基于文本的用户界面。 Tig 使浏览 Git 日志变得容易,但它不仅仅可以让您从上次提交跳到以前的提交。

本 Tig 快速入门中的许多示例直接来自其出色的手册页。 我强烈建议阅读它以了解更多信息。
安装 Tig
- Fedora 和 RHEL: sudo dnf install tig
- Ubuntu 和 Debian: sudo apt install tig
- MacOS: brew install tig
有关更多选项,请参阅官方安装说明。
浏览当前分支中的提交
如果要浏览分支中的最新提交,请输入
tig
就是这样。 这个三字符命令将启动一个浏览器,您可以在其中浏览当前分支中的提交。 您可以将其视为 git log 的包装器。
要浏览输出,您可以使用向上和向下箭头键在一个提交到另一个提交之间移动。 按下 Return/Enter 键将打开一个垂直拆分,右侧显示所选提交的内容。 您可以继续在左侧的提交历史记录中上下浏览,并且您的更改将显示在右侧。 使用 k 和 j 逐行向上和向下浏览,使用 - 和空格键在右侧向上和向下翻页。 使用 q 退出右侧窗格。
在 tig 输出中搜索也很简单。 使用 / 向前搜索,使用 ? 在左窗格和右窗格上向后搜索。

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

浏览单个文件的修订
由于 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 命令。
浏览您的 stash
如果您像我一样,您的 stash 中可能有一堆编辑。 很容易迷失它们。 您可以通过以下方式查看 stash 中的最新项目:
git stash show -p stash@{0}
您可以通过以下方式找到第二个最近的项目
git stash show -p stash@{1}
等等。 如果您可以在需要时记住这些命令,那么您的记忆力比我好得多。
与上面的 Git 命令一样,Tig 使通过简单的调用来增强 Git 输出变得容易
tig stash
在具有已填充 stash 的仓库中发出此命令。 您将能够浏览和搜索您的 stash 项目,从而让您快速了解为下雨天保存的所有内容。
浏览您的 refs
Git ref 是您已提交内容的哈希值。 这包括文件和分支。 使用 tig refs 命令允许您浏览所有 refs 并向下钻取到特定提交。
tig refs
完成后,使用 q 返回上一个菜单。
浏览 git status
如果您想查看哪些文件已暂存以及哪些文件未跟踪,请使用 tig status,它是 git status 的包装器。

浏览 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 来浏览您的 stash。 但是,有了这些绑定,您可以按 a 将一个项目从 stash 应用到您的仓库,然后按 x 从 stash 中删除一个项目。 请记住,您需要在浏览 stash列表时执行这些命令。 如果您正在浏览 stash项目,请输入 q 退出该视图,然后按 a 或 x 来获得您想要的效果。
有关更多信息,您可以阅读有关 Tig 键绑定的更多信息。
总结
我希望这可以帮助您了解 Tig 如何增强您的日常工作流程。 Tig 甚至可以执行更强大的操作(例如暂存代码行),但这超出了本介绍性文章的范围。 这里有足够的信息让您变得危险,但还有更多内容需要探索。
4 条评论