【学了就忘】Git操作 — 59.图形界面工具来查看版本历史

gitk工具是Git提供的一个GUI工具,可以很清晰地查看和搜索版本库中的提交历史,以及支持对Gi的t相关操作。在Git本地版本库目录下直接输入gitk命令即可查看当前分支的。

这个工具不用特殊的安装,一定要进入某一个仓库中,在git终端,执行gitk命令就能使用了。

前提:一定要进入某一个仓库中,并且这个仓库中有Git日志,否则执行Gitk会提示Cannot find a git repository here.

1、Gitk页面的布局

先看一下Gitk全局页面,如下图:

Gitk页面中包含5个部分:

  1. 主菜单栏。

  2. 提交信息显示区:显示提交的基本信息,包括提交的版本分支视图、message、提交人、提交时间和对应提交的SHA1-ID

  3. 查询检索区:在文本框中输入需要查找的检索信息,并且从左边和右边的下拉框中,选择相应类型,帮助我们快速精确的定位到要查找的信息,可按提交人等类型查找提交记录。

  4. 提交详情显示区:显示提交的详细信息。

  5. 文件列表显示区:可以显示提交中包含的文件列表。

    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...新建视图,进行自定义配置,并保存视图。

下面介绍一写查询条件的设置:

  1. references(space separated list):可以指定一个refs,可以是tag,branch,下面还可以选择All xxx。
  2. commit info(regular expressions):可以指定提交信息的Author、Committer、Message作为查询条件。
  3. Changes to Files:可以指定修改的文件内容作为查询条件,可以是固定的文本,也可以是正则表达式。
  4. Commit Date:可以指定时间范围作为查询条件。
  5. Limit and/or skip a number of revision:可以指定只显示revision(修订版)数量,或者可以从头跳过一定数量的revisions,值为正整数。
  6. miscellaneous options:其他选项,比如:按时间排序,标记分支侧,限制只显示第一个parent,简单历史显示。还可以使用其他 git log 命令参数。
  7. Enter files and directories to include,one per line:可以指定一些文件或目录,每行一个。
  8. 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->selectedDiff selected ->thisMake patch这几个需要2个commit进行对比,此时为灰色。

  • Return to markFind descendant of this and markCompare with marked commitDiff this->marked commitDiff 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这一行有几个区域:

  1. Find ↑↓ commit:当根据检索条件检索出结果后,通过上下箭头切换不同的commit。
  2. 检索类型列表

    containing:包含。与后面的范围配合使用。
    touching paths:文件路径。
    adding/removing string:变更内容添加/移除的文本。
    changing lines matching:变更的行数。
  3. 检索条件,用户输入想要检索的内容。
  4. 检索方式

    Exact:精确匹配。
    IgnCase:忽略大小写。
    Regexp:正则表达式匹配。
  5. 检索范围

    All fields:所有范围。
    Headline:commit的标题。
    Comments:commit的注释。
    Author:作者。
    Committer:提交者。

5、提交详情显示区

显示commit的变更记录或两个commit的diff内容。

1、在顶部可用的工具说明:

  • Search:可以检索当前显示区里的内容。
  • Diff:显示两个版本的增删差异。该选项时,最后的Line diff,Markup wordsColor 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操作,所有的操作都在本地,基本也没什么影响,大不了重新下载整个库好了。

参考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章