大家好,我是白鱼。这篇我们介绍 gitk。
gitk 和 fork 界面对比
当我们在 macOS 上执行 brew install git
后, 得到了 git 命令行工具。 然而这条命令并不会安装 gitk
. gitk
是 git 自带的图形化界面工具,也可以称为“穷人版 fork”:
同一个 repo, fork 的界面是:
实话说, gitk 确实没有 fork 好看, 但是基本功能还是很相似:查看 commit history 的树状图, 查看每个 commit 修改的文件内容、文件列表等。 由于 gitk 免费,并且在 windows, linux, macos 都可用, 不得不说有时候它是最佳选择。
macOS 安装 gitk
brew install git-gui
是的,你没看错, 是 git-gui
.
git 官方对于 gitk 的介绍
实际上是来自 pro git 第二版的附录:
https://git-scm.com/book/zh/v2/附录-A%3A-在其它环境中使用-Git-图形界面
如果你读完了本书,那就已经掌握了很多在命令行中使用 Git 的知识了。 你可以用它来处理本地文件,通过网络连接到他人的仓库,以及高效地与他人协同工作。 不过故事到这儿还没结束。Git 通常还会作为一个组件在更大的生态系统中使用, 而终端并不总是最佳的使用方式。现在我们来看看 Git 在其它环境中的使用, 以及其它应用(包括你的应用)是如何与 Git 协同使用的。
当给公司新人 review code,针对 git commit history 出现了非线性提交记录、扰乱了被提交代码本身时,使用 gitk
可视化的查看 commit tree, 表直观。
gitk 是一个历史记录的图形化查看器。 你可以把它当作是基于 git log 和 git grep 命令的一个强大的图形操作界面。 当你需要查找过去发生的某次记录,或是可视化查看项目历史的时候,你将会用到这个工具。
gitk 使用指南
1. 查看 git commit 树
那么 gitk
相比于 git log --graph
命令, 有啥不一样么?是的,图形界面调整字体大小,比终端明显方便的,gitk能更清晰的从 commit tree 看出问题
以 https://github.com/xylcbd/EasyCNN 仓库为例,左图是执行 git log --graph --pretty=oneline
得到的内容,右图是执行 gitk
后进入图形界面看到的内容(鼠标稍微调整了下各个自窗口大小)。显然,左图什么问题都看不出来, 右图很明显看到了橙黄色区域里的commit和底部红色箭头指向的commit重复了:
具体到两次 “initialize repo.” 的commit,我们从 gitk 分别查看提交时间和作者:
可以看到作者、提交时间完全一样。
2. 查看某一段历史记录
gitk
执行的是完整的 commit tree 的查看, 而如果只对某一段 git commit 历史记录感兴趣, 可以只查看这一段的。
例如我们只对 refactoring framework. add MSE loss function.
以及它之前的commit感兴趣,这一段是完全线性的、没有分叉和合并节点的:
我们看到对应的 commit hash 值是 d065024 开头, 因此关掉 gitk
, 在命令行重新打开 gitk
时增加指定 commit hash:
# 格式: gitk <想要查看的最后一个commit>
gitk d065024
3. gitk 默认查看的是当前分支
仍然是以一团乱麻的 git commit history 的 EasyCNN 仓库为例子,我们发现在 update digit_data_sample.
这次 commit 之前都还挺正常的, 因此从这次 commit 切出 dev 分支:
git checkout -b dev 12c4dca
再用 gitk
查看: 发现界面很清晰了:
4. gitk 查看所有分支
gitk --all
上述命令查看所有分支的 commit history:
5. gitk 查看某个目录的 commit 历史记录
用法:
gitk <目录名>
例如
gitk src![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2cf41f9a6fd04d3ab461d58e6b683faa.png)
6. gitk 查看某个文件的 commit 历史记录
gitk <文件名>
例如
gitk README.md
结语
gitk
相对于纯粹的命令行还是有明显优势的。 不过,它没法在图形界面忽略或显示不同的分支、remote, 显示文件树时也没有很好看的 icon, 没法和 fork
这样的后起之秀相比较。 但作为一个基本的 git gui工具,它是合格的,并且是跨平台的,值得掌握使用。