这是git工具的最终篇,主要是Lazygit已经满足日常开发几乎所有要求了
- 足够轻量,不占用系统资源,特别是内存
- 足够便捷,包含日常操作而不需要打一堆命令
- 快捷键齐全,最好切个分支3s内完成
git本身的命令行工具比较薄弱,交互太烂。而VSCode的git管理工具偶尔失灵,比如大文件diff的时候经常卡住,毕竟是个GUI软件,IDE要兼顾的东西太多了,大文件要先AST解析一遍再高亮代码解析肯定不如纯命令行响应速度快。
图形化的软件如SourceTree,腾讯内的UGit,其实都挺好用。网上能下到的也挺多的,比如fork。但是要长期开启一个软件其实还不是非常方便,所以会用终端图形化git管理工具会非常高效,且保证你在每个公司都能一套配置打天下
Lazygit(推荐)
一个比tig更好用的git图形化工具
brew安装
brew install lazygit
其他安装方式请自行查阅文档
~/.bashrc
设置别名,执行完source
一下生效
alias lg="lazygit"
帮助
x
快捷键可以调出help面板
使用
区块切换 1-5/tab
- 数字1-5在区块间切换
- tab区块切换
- h/l也可以在上一个/下一个区块间切换
- q退出
- x菜单
[]
(中括号键)可以在Branches面板里切换
新建和切换分支/分支同步远端
branch区块,n就可以创建新的分支,输入分支名就好了
- P可以推送分支,
git push
- p可以拉取分支,
git pull
- 选择分支后f可以同步远端修改,
git fetch
git add
- j(▲)/k(▼)在文件树上下切换
- H/L在文件树左右移动,主要针对窗口显示不下的情况
如果要针对某一行做add,可以回车进入文件,选中某行后空格做add staged操作。同理a
可以选中单文件全部修改,一起操作,跟VSCode里git面板操作一样一样的。
也可以tab切换面板,用d
做unstaged操作
如何add某一行?
也可以v进入visual模式(vim操作),选中多行后空格add
如何放弃某行修改
选中后d
删除这一行的修改,回车确认即可,有提醒可以注意下
选中文件后按d
,则可以放弃一个文件的全部修改
如何放弃全部修改
files区块,按d
即可
更加多的功能
D
会有更多的功能
当然你可以直接清空本地修改,选第一个选项 nuke working tree,本地修改都会还原
如何unadd
tab可以切换到Stage视图,然后空格或者d取消add操作,同理可以选中多行操作
git commit
block聚焦Files(第二块),直接输入c就可以了,会弹出输入框输入commit message提交
Amend Commit
同理,git commit --amend
可以通过A
来实现
revert commit
选中commit后t可以revert commit,即创建一个新的commit抵消原有的commit。 一般是提交公共分支后需要回退之类的
checkout branch
选中分支后<space>
空格键检出,最简单的方式了
也可以选中分支后按F
,就是git reset
,配合soft/mixed/hard选项,省略敲命令的过程
也可以按c
输入分支名检出
branch merge
在源分支(from) -> 目标分支(target)操作过程中,可以通过选择待合并分支后,按 M
进行merge操作
git reset
移动到4 Commits视图,输入g就可以了
也可以到commit面板的的Reflog检出,比如reset后Commit面板没有的
按g
可以检出
cherry-pick
cherry-pick 基本概念 ruanyifeng git-cherry-pick 可以看下
到Commit区块后,空格就可以应用选择的commit了。注意这里cherry-pick时候本地不能有没有提交的内容
把某个commit应用到其他分支
比如把上图test分支最新的commit合入master分支,可以这么操作
- 选择commit后
c(copy commit)/C(copy commit range)
,都是cherry-pick的操作 - 按3回到Branch面板按空格切换分支到master
- 按4到Commits面板,按
v
粘贴
通过如上三步可以把一个commit同步到不同分支
把某行修改做修改
如上,Commit面板选择commit回车选择文件回车,选定范围后Control+p
调出面板,可以把patch还原,也可以移动到工作区或者新的commit
rebase interactive
处理rebase信息后m
可以选择continue或者skip等继续操作
Rebase
选择分支后按r
就可以rebase branch了,如下图等价于git rebase master
。如果有冲突可以解决冲突后回车continue
同时,选中commit的时候control+j/k
可以移动commit的上下位置
合并commit - fixup or Squash
如何借助fixup与autosquash让Git分支保持整洁
fixup和squash区别:fixup是合并相邻两次commit,squash一般是合并一大片commit
fixup
可以看到跟
git commit --fixup <commitId>
效果是一样的
Squash
可以看到跟
git rebase -i --autosquash <commitId>
效果是一样的
solve conflict
合并有冲突会有提示,根据提示进入解决冲突阶段
<Space>
空格可以选择保留的部分,上下方向键切换- 左右方向键可以在前后两次冲突间切换
b
代表both,保留两次冲突的修改
push/pull
- p: pull files
- P: push files
stash/pop stash
比如像暂存一些东西方便去其他分支做bugfix之类的
- 也可以
g
取出来stash的东西(会删除stash) - 如果不希望删除可以按空格,则可以取出stash而不删除
- 可以直接
d
删除某个stash
回滚代码
通过commit面板找到需要回滚的部分,然后d
回滚这次的修改
查看某个文件的修改历史 filtering
追责或者想找出谁修改了某个文件的时候特别有用
在Commit面板选择文件后ctrl+s
,会输出对这个文件所有修改的记录
查看两次commit的diff
在commits面板,W
显示diff选项,选择后commitId变为粉红色