zen·工作环境搭建之git篇

主要是因为git的命令行工具比较薄弱,交互太烂。而VSCode的git管理工具遇到过失灵的情况,比如大文件diff的时候经常卡住,没办法IDE要兼顾的东西太多了大文件要先AST解析一遍再高亮代码解析肯定不如纯命令行来的快。

图形化的软件如sourceTree,腾讯内的UGit,其实都挺好用,但是要长期开启一个软件其实还不是非常方便,所以会用终端图形化git管理工具会非常高效,且保证你在每个公司都能一套配置打天下

Lazygit(推荐)open in new window

一个比tig更好用的git图形化工具

中文文档: https://gitcode.gitcode.host/docs-cn/lazygit-docs-cn/Config.htmlopen in new window

brew安装

brew install lazygit

其他安装方式请自行查阅文档

~/.bashrc设置别名,执行完source一下生效

alias lg="lazygit"

使用

区块切换 1-5/tab

  • 数字1-5在区块间切换
  • tab区块切换
  • h/l也可以在上一个/下一个区块间切换
  • q退出
  • x菜单

新建和切换分支/分支同步远端


branch区块,n就可以创建新的分支

选择分支后f可以同步远端修改

git add

  • j(▲)/k(▼)在文件树上下切换
  • H/L在文件树左右移动,主要针对窗口显示不下的情况

如何add某一行?

也可以v进入visual模式(vim操作),选中多行后空格add

如何放弃某行修改

选中后d删除这一行的修改,回车确认即可

如何unadd

tab可以切换到Stage视图,然后空格或者d取消add操作,同理可以选中多行操作

git commit

block聚焦Files(第二块),直接输入c就可以了,会弹出输入框输入commit message提交

revert commit

选中commit后t可以revert commit,即创建一个新的commit抵消原有的commit。
一般是提交公共分支后需要回退之类的

checkout branch

选中分支后F检出,本地修改会被忽略,貌似只有这种方式方便点。也可以按c输入分支名

git reset

移动到4 Commits视图,输入g就可以了

cherry-pick

ruanyifeng git-cherry-pickopen in new window

到Commit区块后,空格就可以应用选择的commit了。注意这里cherry-pick时候本地不能有没有提交的内容

rebase interactive

处理rebase信息后m可以选择continue或者skip等继续操作

Rebasing a Git merge commit

选择分支后按r就可以rebase branch了,如下图等价于git rebase master。如果有冲突可以解决冲突后回车continue

同时,选中commit的时候control+j/k可以移动commit的上下位置

Amend Commit

fixup committ

如何借助fixup与autosquash让Git分支保持整洁open in new window



可以看到跟git commit --fixup <commitId>效果是一样的


可以看到跟git rebase -i --autosquash <commitId>效果是一样的

push/pull

  • p: pull files
  • P: push files

stash/pop stash

比如像暂存一些东西方便去其他分支做bugfix之类的

也可以g取出来stash的东西

tigopen in new window

就是git反过来写,很强大的终端图形化git管理工具。

主要是熟悉几个命令, Ctrl+C 可以退出交互

安装

brew update
brew install tig
sudo yum update
sudo yum install tig
sudo apt-get update
sudo apt-get install tig

视图

有这么几种视图模式

m mainView(默认视图)

s statusView

自上而下分别是

  • 需要提交的文件,可以按C提交
  • 有追踪未提交的文件
  • 新增未追踪的文件

r refs

感觉类似git branch,方便查看所有分支。加上/的搜索,n/N切换上下可以很快定位到你需要的分支

y stash

中文应该翻译为储藏区,比如要将本地修改但是不需要提交的文件缓存,方便bugfix后回来恢复现场

d diffView

类似git diff

l logView

类似git log

其他的可以看tig h帮助文档

分屏操作

查看信息的时候会发现会自动分左右两块屏幕,可以通过Tab切换左右两块屏幕的视图

也可以在选中右侧屏幕时,按住shift+上下切换(j/k)来固定右分屏切换左侧分屏选择信息

指南open in new window

tig status # 进入status视图,会注明 Untracked files/Changes not staged for commit/Changes to be committed 的文件
tig blame <file> # 查询文件的每一行最后修改信息
tig <branchname> # 查看某个分支的提交信息
tig <oldBranch>..<newBranch> # 查看两个分支的diff
tig <filename> # 查看某个文件的提交历史

需要结合常见的vim光标移动和翻页操作

hjkl 左下上右
ctrl+d down下翻半页
ctrl+u up上翻半页
空格 下翻一页
- 上翻一页
@ 代码块粒度滚动

常见操作

add/unadd

常见的,可以这么几步

  1. tigs 进入status View
  2. 选择文件后按u,可以将文件加入staged,也可以将staged的文件移出

commit/uncommit

上面进入status View后,staged的文件,按C可以进入Commit,然后i输入commit message后:x保存退出就可以了

顺手查了下:x:wq的区别: :wq会强制写入文件,就算内容没变化也会改mtime,而:x比较智能内容不变化mtime不变

switch branch

进入tig的refs视图,选择好分支后C检出分支即可

Run `git checkout mmbizwxaproducttradeweb_pphu_aftersale`? [Yy/Nn]

输入y即可

stash(@todo)

当然上面你会说有文件要先存一下再去切换分支做bugfixs,可以用到stash
stash一般翻译为暂存区,就是缓存文件的一个区域

gsta # git plugin缩写
git stash push # git stash push -u,-u 参数是包含未跟踪的文件

通过git plugin的快捷键操作

tig+y 进入stashView, 通过P将暂存区的内容应用到本地

A ?git stash apply %(stash)
P ?git stash pop %(stash)
! ?git stash drop %(stash)

搜索

/进入搜索,n/N选择下/上一个搜索对象

revert

有时候要丢弃工作区的修改,可能会用git checkout -- .或者git reset HEAD来恢复整个工作区

有了tig可以直接在status View直接按!,会提示你是否revert,输入y即可

Are you sure you want to revert changes? [Yy/Nn]

diff branch

比较两个分支的不同,比如当前在B分支已经合并了master,需要与master分支比对

tig master..B # 可省略为下面的写法,因为当前为B分支
tig master..

此时跟git diff视图类似,会列出B分支多出来的commit,这时输入f会进入查找,输入d会进入diff view,都会列出所有的改动文件列表

Last Updated:
<manfred>峯</hu>
欢迎关注微信公众号 【Big前端】无广告,无软文,就是这么傲娇。直推一线大厂高质量内容,不局限于前端·后台·运维相关,还包括房价🏠、信用卡💳等内容也可内推一线大厂腾讯阿里字节,对腾讯字节比较熟悉,简历可以发给我,我会给你介绍一线大厂的情况,让你更加了解一线大厂