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

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

ubuntu: sudo apt-get 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

至此, 我分享了一些日常使用频率很高, 但使用 Git 命令来完成却很繁琐的 tig 使用攻略, 文章最后, 我想分享一个学习 Git 命令的捷径, 我在学习 Git 的过程中, 自己觉得还是走了一点弯路, 如果你知道 oh-my-zsh 的 Git aliases, 你就知道我在说什么了, 这份 aliases 整理了所有常用和有用的 Git 命令, 初学者通过它能避免冗长的 Git 命令打击热情, 也可以避免在不实用的 Git 命令上多花时间, 有经验的开发者可以通过它来查漏补缺, 看看哪些看似无用的 Git 命令加参数后就变得无比实用. 如果在一个团队中推广这份 aliases , 可以避免你在队友的电脑上习惯性敲自己编的 alias 无效的麻烦, 如果你使用 Dash, 可以直接搜索 Oh-My-Zsh Git 添加这份 aliases 文档.

参考:https://www.jianshu.com/p/e4ca3030a9d5

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

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

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

  2. 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. iPhone 和 iPad的ios 开发中 利用 WebViewJavascriptBridge组件,通过 UIWebView 对Html进行双向通讯...
  2. maven 部署nexus_设置本地Nexus存储库并从Maven部署WAR文件
  3. unzipped list
  4. 图论 —— 图的连通性 —— Kosaraju 算法
  5. Syslog Cisco Incident
  6. linux进程阻塞例子,一个Linux守候进程例子
  7. Data truncation: Data too long for column错误分析
  8. 给新晋技术团队Leader的4条建议
  9. linux 基础命令 1
  10. element ui中动态合并单元格_element ui单元格的动态合并
  11. Composite(组合)
  12. java中文网站总汇
  13. wps无法使用F4重复上一步操作的解决方法
  14. 数据模型 同比 环比_同比和环比计算公式?
  15. win10和ubuntu16.04双系统双硬盘(500gSSD+500gHDD)安装
  16. win10磁盘100%占用
  17. 画出漂亮的神经网络图,神经网络可视化工具大汇总
  18. java 给图片添加水印文字
  19. 读书笔记:司马迁《史记》之孝文本纪
  20. 基于Java毕业设计房屋租赁平台源码+系统+mysql+lw文档+部署软件

热门文章

  1. python类添加方法以及pow和cmp的使用
  2. python手动绘图案例_python绘图案例——递归绘制分形树
  3. centos mysql5.6.35_centos6.8 mysql 5.6.35 glibc安装
  4. 用python写用手机发邮件_如何用python写发邮件?
  5. linux批量重命名脚本,Linux批量命名文件SH脚本整理
  6. Blob URL 是什么?
  7. 获取服务器时间的软件如何修改时间,小程序云开发获取服务器时间
  8. php用户同步,ucenter同步用户登录【转】
  9. java 类文件_Java类文件概述
  10. matlab的simin用法,在Maltlab 的simulink中怎么输入讯号