tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作, 如 git log, git diff 以及 git blame等, 使用常见安装源能够方便地安装它.

ubuntu: sudo apt-get install tig

centos: yum install tig

macOS: brew install tig

Git 和 tig 的关系有点像 top 和 htop, 是一种命令行交互式操作工具 tig 的所有功能都是 Git 命令行已经具备的,  tig 提供了一种直观, 方便快捷的 Git 操作.

在 Git 项目中敲 tig, 进入 tig 界面后再敲 h (代表help) 即可进入帮助界面, 该界面列出了所有常用命令项目分支下直接敲 tig, 进入到了 log 界面, 使用 j/k 或 上/下 键可以选择指定提交, 回车后, 界面的一半会展示此次commit详情, 此时, 上/下 键可以选择 log 中的 commit, 详情界面会跟着变化, 而 j/k 键会在 commit 详情内移动焦点, 选中 commit 中列出的文件, 回车会跳转到该文件的详情, 而使用 @ 可以按照代码块的粒度来浏览 commit 中的内容, 通过这些操作, 我们可以很容易的快速浏览log 中多个commit 中的内容, 而这一点通过 Git 命令或 GUI 都是很难快速方便的完成的.

快速查看 log 详情及 help

在使用 Git 命令的过程中, 最高频的命令应该是 git status, 主要用来查看 staged changes 和 unstaged changes, 通过 tig, 可以很方便的像刚才查看 commit 那样查看 staged changes 和 unstaged changes, 敲 tig 进入 log 界面后, 排在最上面的便是 staged changes 和 unstaged changes, 至此, staged changes 和 unstaged changes 就像一个 commit 一样被方便地展示出来了, 敲回车, 详情界面展示出来后敲 u 会使整个 changes 由staged changes 变为 unstaged changes, 或是由unstaged changes 变为 staged changes, 如果想要 changes 中的某一个文件改变状态, 则在详情界面选中该文件, 回车, 再敲 u ,即可使该文件由 staged 变为 unstaged, 或是由 unstaged 变为 staged, 如果你想重置某个文件的修改, 选中该文件敲 ! 即可, 再也不用使用 git reset HEAD这个命令了.

log 界面最上方可以查看未提交修改
如果我还想看 untracked files 怎么办呢? tig 提供了一种更纯粹的查看 git status 的界面, 进入 tig 后直接敲 s 即可, 选中 untracked file 或 unstaged file, 敲 u, 即可变为 staged file, 选中 staged file 敲 u 变为 unstaged file, 如果你想重置某个文件未保存的修改, 在该文件下敲 ! 即可, 如果你准备好提交了, 按下 shift + c 即可打开默认命令行编辑器来编辑 commit message, 如果在 tig 主界面按下shift + c, 将会使用 git cherry-pick 命令.

tig 的 status 界面

tig 也可以当做命令行版的 Finder 来使用, 在 log 主界面敲 t (代表 tree) 即可进入此次 commit 中所有文件列表, 在文件夹下回车可以进入文件夹, 在文件下回车可以在界面的一半展示该文件的全貌(而不是此次 commit 的修改).

tree 界面

如果选中文件, 按 b 即可进入该文件的 blame 界面, 在 blame 中选中任意一行回车, 即可在界面的一半展示此次 commit 的所有内容, 依然可以用 j/k 控制详情内容的单行移动, 回车跳转到某文件, @按照代码块粒度滚动, 这种操作比使用 git blame 方便了许多.

blame 界面下快速查看 commit 全貌

如何查看 diff 中某句修改时整个文件的面貌呢? 实际上在 diff 界面也可以直接敲 b 进入 blame 界面即可查看截止此次提交时该文件的全貌, 如果明确知道想要看哪个文件的 blame 全貌, 也可以 直接使用 tig blame filename.

如何查看一个文件的全部提交记录? 以及快速查看某次提交的全部内容? 有了 tig, 可以轻松做到这一点, 直接 tig filename, 进入到该文件的 tig 主界面, 即可快速查看指定文件的 log 和提交内容, 你还可以选择只查看某个 commit 以及之前的提交, 只需要使用 tig commit-id filename 即可.

如何查找 commit message 中带有指定文字的 commit 呢? 如果终端本身支持搜索功能, 使用终端自带的 cmd + f 即可搜索 tig 主界面中的任何文本, 那如何通过 commit-id 查找呢? tig 主界面中默认没有展示 commit-id, 使用 shift + x 即可展示 commit-id.

tig 也自带搜索功能, 敲 / 即可进入, 输入字符后回车, 将高亮展示所有匹配项, 敲 n 将聚焦到离当前焦点最近的下方的匹配项, 大写 N 则是上方的匹配项, 敲回车将展示详情.

tig 的原生搜索功能

在提交 commit 中常常会碰到按代码块的粒度来提交的需求, 使用原生的 git add -i 略显繁琐, 在 tig 中, 这个操作变得无比简单, 只需要在 staged changes 或 unstaged changes 使用 @ 选中代码块, 敲 u 即可改变状态, 如果你只想改变一行代码的状态, 使用 j/k 选中要改变的单行代码, 用数字键 1 代替 u 即可实现这个原本用 Git 命令行很难实现的功能.

进入 tig 主界面敲 r 即可看到项目分支列表, 在分支下敲回车即可进入 log 界面, 使用这个功能可以快速在不同分支之间查阅代码, 免去了频繁切换分支的麻烦, 需要切换分支时, 选中分支按住 shift + c 即可.

快速在不同分支中查看具体 commit

作者:Valence链接:https://www.jianshu.com/p/e4ca3030a9d5来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Git 命令使用体验的神器 -- tig相关推荐

  1. 颠覆Git 命令使用体验的神器 - tig

    颠覆 Git 命令使用体验的神器 -- tig tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作, 如 git log, git d ...

  2. linux tig不支持中文,颠覆 Git 命令使用体验的神器 -- tig

    tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作, 如 git log, git diff 以及 git blame等, 使用常见安 ...

  3. tig--颠覆 Git 命令使用体验的神器

    tig, 就是把 Git 这个单词倒过来念, 它是一个命令行工具, 日常使用中我用它来取代 Git 最高频的几个操作, 如 git log, git diff 以及 git blame等, 使用常见安 ...

  4. linux tig不支持中文,tig — 让 git 命令行可视化

    tig 是一款优化 git 命令行的工具,使 git 命令行更加的便捷人性化 .如果用习惯了,会上瘾. image 基础 安装 在 Mac 上最简单的方式是使用 Homebrew: brew inst ...

  5. externalreferences 命令在 sdi 模式下不可用_一个适合新手交互式Git命令学习项目

    前言 在我们日常工作开发中,Git是必不可少的版本控制软件,很多时候我们都用Git来管理我们的项目. 比较常用的有Github,Gitlab,Stash等. 因此对于Git命令的掌握是我们工作必备的能 ...

  6. -bash: wget: 未找到命令_18个堪称神器的命令行工具,高效运维必备

    上期入口:24个 CSS 高级技巧合集 提示:因公众号不支持超链接,上图所有项目地址,可在公众号后台回复关键字 "命令行工具" 获取. thefuck 命令行打错了以后,打一个fu ...

  7. git指令如何葱master转到dev_小姐姐用动画图解Git命令,一看就懂!

    「 点击图片获取最近两年爆款好文 」 无论是开发.运维,还是测试,大家都知道Git在日常工作中的地位.所以,也是大家的必学.必备技能之一.之前公众号也发过很多git相关的文章: Git这些高级用法,喜 ...

  8. Node.js git命令

    一.课堂开篇 1.1 自我介绍 1.2 第三阶段课程简介 二.Git版本控制工具 为什么要使用版本控制工具?[了解] 在公司中开发项目时通常是多人协同开发,经常会出现代码文件相互被覆盖.代码不同步.同 ...

  9. 冰河亲自整理的Git命令汇总,悄悄努力,然后惊艳所有人

    大家好,我是冰河~~ Git目前是各大互联网公司使用的版本控制工具,进大厂,必须要学会Git的基本使用.这不,最近就有很多小伙伴私信我:冰河,可以帮我整理下Git的使用命令吗?网上的太零散了,买书看又 ...

最新文章

  1. leetcode-34-在排序数组中查找元素的第一个和最后一个位置
  2. mangodb 高频数据_金融分析量化系统,高频交易程序数据库通常采用哪种方式存贮数据?...
  3. 详解Python中的JSON以及在Python中使用JSON
  4. ITK:提取给定的标签对象
  5. 【miscellaneous】IP多播技术及其编程
  6. python分布式框架_高性能分布式执行框架——Ray
  7. EntityFramework Code First 添加唯一键
  8. 10月21日下午PHP常用函数
  9. Spring框架----Spring的bean之三种创建bean对象的方式
  10. post-commit hook failed (exit code 255) with no output 解决方案
  11. 技术无价,“悟”有所值——UCan下午茶这一年
  12. Windows下用FFmpeg+nginx+rtmp搭建直播环境 实现推流、拉流
  13. 易速联服务器稳定吗,异速联如何保障应用安全性?
  14. SPF算法中的ISPF和PRC介绍
  15. 【无标题】开发一个app到底要多少钱?有多贵?
  16. Win7系统盘瘦身。
  17. C#与C/C++的交互
  18. 使用爬虫爬取两种数据:结构化/非结构化文本
  19. PHP API接口鉴权
  20. OpenGl太阳地球月亮运动系统

热门文章

  1. 微信小程序-云开发云调用API没有权限(no permission)问题
  2. 两层板(双面板)如何控制50欧特性阻抗
  3. 给社交软件“一星保护”:95后在想什么
  4. wp后台页面切换慢,打开速度慢:jquery-ui.min.css加载失败——在国外
  5. DevTools 无法加载来源映射无法加载 httplocalhost8082axios.min.map 的解决方法
  6. ipython notebook 如何打开.ipynb文件?
  7. python 步数_用python如何修改微信和支付宝每天走路的步数
  8. 写一段wavefront_reader的代码
  9. Android 知识点——Method put in org.json.JSONObject not mocked
  10. 确定sw1开关信号输入端口_机械光开关 MEMS光开关