gitk
工具是Git提供的一个GUI工具,可以很清晰地查看和搜索版本库中的提交历史,以及支持对Gi的t相关操作。在Git本地版本库目录下直接输入gitk
命令即可查看当前分支的。
这个工具不用特殊的安装,一定要进入某一个仓库中,在git终端,执行gitk
命令就能使用了。
前提:一定要进入某一个仓库中,并且这个仓库中有Git日志,否则执行Gitk会提示
Cannot find a git repository here.
1、Gitk页面的布局
先看一下Gitk
全局页面,如下图:
Gitk
页面中包含5个部分:
-
主菜单栏。
-
提交信息显示区:显示提交的基本信息,包括提交的版本分支视图、
message
、提交人、提交时间和对应提交的SHA1-ID
。 -
查询检索区:在文本框中输入需要查找的检索信息,并且从左边和右边的下拉框中,选择相应类型,帮助我们快速精确的定位到要查找的信息,可按提交人等类型查找提交记录。
-
提交详情显示区:显示提交的详细信息。
-
文件列表显示区:可以显示提交中包含的文件列表。
Patch
:显示本次提交的差异文件列表。Tree
:显示本次提交记录的所有文件列表。
2、主菜单栏
(1)File
-
Update
:更新。如果在另一个窗口的命令行上做了什么,并希望将这些更改反映在Gitk中。
该操作更新引用并显示新值,同时仍显示旧值。
它在执行了像
rebase
这样的操作之后最有用,因为可以比较前一个分支头和新的分支头。 -
Reload
:完全刷新,扔掉以前显示的所有内容。 -
Reread references
:刷新标签和分支。 -
List references
:出现一个窗口显示,以列表的方式显示分支和标签。 -
Start git gui
:打开git gui
工具。(类似于TortoiseGit) -
Quit
:退出Gitk。
(2)Edit
preferences
:首选项,对Gitk的一些个人设置,如最大显示行数,宽度,空格个数,颜色和字体的设置等。
(3)View
这个菜单主要是设置快速查询视图。
通过New view...
新建视图,进行自定义配置,并保存视图。
下面介绍一写查询条件的设置:
-
references(space separated list)
:可以指定一个refs,可以是tag,branch,下面还可以选择All xxx。 -
commit info(regular expressions
):可以指定提交信息的Author、Committer、Message作为查询条件。 -
Changes to Files
:可以指定修改的文件内容作为查询条件,可以是固定的文本,也可以是正则表达式。 -
Commit Date
:可以指定时间范围作为查询条件。 -
Limit and/or skip a number of revision
:可以指定只显示revision(修订版)数量,或者可以从头跳过一定数量的revisions,值为正整数。 -
miscellaneous options
:其他选项,比如:按时间排序,标记分支侧,限制只显示第一个parent,简单历史显示。还可以使用其他git log
命令参数。 -
Enter files and directories to include,one per line
:可以指定一些文件或目录,每行一个。 -
Command to generate more commits to include
:这个除了上面指定的选项外,还可以可以指定一些命令来过滤commit记录,更加灵活。
如下图:
创建过视图后,再次在点击View
菜单,就可以选择Edit view...
编辑视图,和Delete view
删除视图了。
(4)Help
-
About gitk
:Gitk简介。 -
Key bindings
:查看快捷键。
3、提交信息显示区
(1)内容显示说明
该区域显示版本库中提交的基本信息,包括提交的版本分支视图、message
、提交人、提交时间和对应提交的SHA1-ID
。
-
SHA1 ID
:所选提交的commit-id。 -
Row
:当前行数/总行数,每个提交一行。
(2)颜色和粗体
- 本地分支名称是绿色背景,如
master
分支。 - 远程分支名称是橘色和绿色混合的背景色。
- 当前所在的分支或标签名称以粗体显示,如
master
分支。 - 标签是黄色背景,如
v1.0
标签。 - 黄色圆点标志,便是当前HEAD的指向。
- 黄色的方块标记,代表该提交有
notes
。Git备注(notes)是用于给提交补充消息的,但是不会改变提交信息。
(3)版本分支视图的使用
在版本分支图中的某一个提交上右键,还可以进行很多的操作。
可以根据分支和commit显示不同的菜单,完成不同的操作。
1)选中一个分支,比如:master
。
-
check out this branch
:检出这个分支,当有多个分支时,且当前HEAD不在该分支时可用。 -
rename this branch
:重命名分支。 -
Remove this branch
:移除分支,当有多个分支时,且当前HEAD不在该分支时可用。
2)选中一个提交
-
Diff this->selected
、Diff selected ->this
、Make patch
这几个需要2个commit进行对比,此时为灰色。 -
Return to mark
、Find descendant of this and mark
、Compare with marked commit
、Diff this->marked commit
、Diff marked commit->this
这几个是个marked commit
相关,看下面。 -
Create tag
:基于选中的commit创建一个tag。 -
Copy commit summary
:拷贝提交的信息,包括7位commit ID、message和提交日期。 -
Write commit to file
:将该commit的详细信息写到一个文件,包括提交信息和提交内容。 -
Create new branch
:基于该commit创建分支。 -
Cherry-pick this commit
:将该commit应用到当前HEAD分支。 -
Reset ${BRANCH} branchs to here
:将当前分支重置到当前commit。 -
Mark this commit
:标记当前commit,标记后,右键其他commit时跟marked 相关的菜单可用,只能有一个Marked的commit。 -
Revert this commit
:回退到当前commit。Revert和Reset是不一样的,Revert会生成一个新的commit。
3)基于上面选中且Marked的commit,右键其他任意一个commit,之前灰色的菜单就可用了。
-
Diff this-> selected
:当前commit与选中的commit的diff。diff内容会在区域4中显示,diff文件列表在区域5中显示。 -
Diff selected-> this
:选中的commit与当前commit的diff。diff内容会在区域4中显示,diff文件列表在区域5中显示。 -
Make patch
:将这两个commit的diff生成一个patch文件。 -
Return to mark
: 切换回到marked的commit。 -
Find descendant of this and mark
:查找当前commit和Marked commit共同的后代节点。 -
Compare with marked commit
:当前commit与Marked commit的比较。这里的比较和diff是不一样的。 -
Diff this->marked commit
:当前commit和Marked commit的diff。 -
Diff marked commit->this
:Marked commit与当前commit的diff,与上图相反。
这些是右键菜单的基本功能,可以找一个代码库多练习。
4、查询检索区
根据检索条件查找的窗口。
这个窗口有强大的检索功能,能够根据作者、提交人、变更文件、变更内容等查找commit。当我们在排查问题时,一般不记得具体是在那次提交里做的变更,但我们可能会记得是哪个文件,是谁提交的,此时我们就可以通过检索查找commit,对于根据变更文件查找,可以配合使用区域5的文件树,效果会更好。
在Find这一行有几个区域:
-
Find ↑↓ commit
:当根据检索条件检索出结果后,通过上下箭头切换不同的commit。 - 检索类型列表
containing
:包含。与后面的范围配合使用。
touching paths
:文件路径。
adding/removing string
:变更内容添加/移除的文本。
changing lines matching
:变更的行数。 - 检索条件,用户输入想要检索的内容。
- 检索方式
Exact
:精确匹配。
IgnCase
:忽略大小写。
Regexp
:正则表达式匹配。 - 检索范围
All fields
:所有范围。
Headline
:commit的标题。
Comments
:commit的注释。
Author
:作者。
Committer
:提交者。
5、提交详情显示区
显示commit的变更记录或两个commit的diff内容。
1、在顶部可用的工具说明:
-
Search
:可以检索当前显示区里的内容。 -
Diff
:显示两个版本的增删差异。该选项时,最后的Line dif
f,Markup words
,Color words
是按不同样式显示diff。 -
Old version
: 显示旧版本。 -
New version
:显示新版本。 -
Lines of context
:显示变更区域的上下文显示行数,当需要查看更多内容时,可将值设大。 -
Ignore space change
:是否忽略空格变化。
2、在区域的顶部显示本次提交的信息:
-
Author
:作者。 -
Committer
:提交者。 -
Parent
:当前commit的父节点,当为Merge节点时会显示多个Parent,此处为超链,可跳转到相应的节点。 -
Child
:当前节点的孩子节点,当从该节点新建不同分支时,会有多个Child,此处为超链,可跳转到相应的节点。 -
Branches
:当前节点最近的HEAD分支,当前提交的分支可跳转。 (也可以这样说,与该commit产生关联的分支是哪些) -
Follows
:当前节点最近的上一个Tag。 -
Precedes
:当前节点最近的下一个Tag,有可能是计划Tag。 -
Tag
:当前为tag时会显示标签信息。
说明一下Author和Committer的含义
- 每一次的提交既有作者
Author
,还有一个提交人Committer
,为什么一次提交,又有作者又有提交人,他们的区别是什么?- 作者
Author
和提交人Committer
在一次commit
时,大部分的情况下都是一样的。- 有这么一种情况,在一个分支中的一个
commit
我很需要,我想把他挑出来,放到我自己开发的分支中,这个过程叫cherry-pick
(就是挑选某一次的commit,放到另外一个分支),Git设计的时候为了尊重版权,是这样设计的,你拿来别人的commit
,作者Author
是别人,你修改后进行提交的时候,这个提交者Committer
是你。在这种情况下,就会出现作者Author
和提交人Committer
不同的情况。
6、文件列表显示区
显示的 commit的文件列表或两个commit的diff文件列表。
1、顶部工具说明
-
Patch
:显示只有变更的文件列表,默认显示此项。 -
Tree
:显示全部文件树,当想查看其他未变更文件内容时,可选择此项。
2、在文件路径上右键菜单
-
Highlight this too
:当其他文件已经高亮时,如此也想将变更文件包含该文件的commit也高亮,可选择此项。 -
Highlight this only
:只将变更文件包含该文件的commit高亮显示。 -
External diff
:使用外部的diff工具查看。 -
Blame Parent commit
:能够查看该文件的全部内容的变更记录,并能够进行切换。 -
Copy path
:拷贝文件路径。
7、总结
基于这个gitk
图形化界面,可以做很多的事情
那么有图形界面为什么还要命令方式行查看版本历史呢?
- 这个是有原因的,因为两种方式各有优缺点,因为好多开发人员他喜欢用vim这种编辑器来编辑文件内容,他很可能很喜欢用命令行的方式,他们习惯了,所以用命令行的方式效率更高,他可以想要什么,就用命令指定呈现出来,而且不用切换界面,所以这批人他是很喜欢用命令行方式的。
- 那剩下还有一些很可能是一直操作windows操作系统的图形界面,习惯了这种图形化界面展示的,对图形界面的情有独钟。
提示一点:在Git中即使有很多不了解,只要不做
push
操作,所有的操作都在本地,基本也没什么影响,大不了重新下载整个库好了。
参考:
网友评论