zen·工作环境搭建之git篇
主要是因为git的命令行工具比较薄弱,交互太烂。而VSCode的git管理工具遇到过失灵的情况,比如大文件diff的时候经常卡住,没办法IDE要兼顾的东西太多了大文件要先AST解析一遍再高亮代码解析肯定不如纯命令行来的快。
图形化的软件如sourceTree,腾讯内的UGit,其实都挺好用,但是要长期开启一个软件其实还不是非常方便,所以会用终端图形化git管理工具会非常高效,且保证你在每个公司都能一套配置打天下
Lazygit(推荐)
一个比tig更好用的git图形化工具
中文文档: https://gitcode.gitcode.host/docs-cn/lazygit-docs-cn/Config.html
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
到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分支保持整洁
可以看到跟git commit --fixup <commitId>
效果是一样的
可以看到跟git rebase -i --autosquash <commitId>
效果是一样的
push/pull
- p: pull files
- P: push files
stash/pop stash
比如像暂存一些东西方便去其他分支做bugfix之类的
也可以g取出来stash的东西
tig
就是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
)来固定右分屏切换左侧分屏选择信息
指南
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
常见的,可以这么几步
tig
后s
进入status View- 选择文件后按
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,都会列出所有的改动文件列表
