小伙伴们,大家好,我是小溪,见字如面。最近一直在使用CLI开发,已经很久没有打开过IDE了,只有在检查Diff和提交代码时才会打开IDE,那有没有可以不依赖IDE就能可视化查看Diff和管理Git的工具呢?还真有,最近发现一个可视化Git命令行管理工具lazygit在一定程度上可以解决这个的痛点。当前使用版本
0.60.0
优势
支持macOS、Linux、Windows多平台
可视化git状态及管理
限制
macOS 10.12及以上版本
TUI环境限制无法展示复杂的图形化提交树或高分辨率的代码差异对比
简介
lazygit 是一款基于Go语言开发的终端交互式Git界面。它旨在通过简洁的键盘快捷键简化复杂的 Git 操作,让开发者既能享受命令行的速度,又能拥有图形化界面的直观体验。
Github地址:https://github.com/jesseduffield/lazygit
核心优势
lazygit CLI具有以下核心优势:
交互式变基 (Interactive Rebase) 极其简单:这是其最大杀手锏。相比于 Git 原生复杂的 TODO 文件编辑,在lazygit中,你只需按下 i 即可开始,并能通过快捷键轻松完成Squash (s)、Fixup (f)、Drop (d)或 调整提交顺序 (ctrl+k/j)。
精细化暂存 (Staging):支持对文件内的特定行 (Line-by-line) 或特定区块进行暂存。通过按下 v 进入行选择模式,可以非常直观地拆分大提交。
可视化冲突解决:在处理合并冲突时,它提供了清晰的对比视图,允许用户通过快捷键快速选择保留哪一方的代码,极大降低了手动编辑冲突文件的出错率。
高效的工作区管理 (Worktrees):内置了对 Git Worktree 的原生支持。在分支面板按 w 即可创建并跳转到新工作树,无需为了切换任务而频繁使用stash。
高度可定制:用户可以通过 自定义命令 (Custom Commands) 扩展功能,甚至可以集成 GitHub CLI (gh) 来在终端内直接查看 Pull Request 状态。
安装
macOS可以使用Homebrew和MacPorts安装
# Homebrew$ brewinstalllazygit# MacPorts$sudoportinstalllazygitLinux的支持非常全面,几乎涵盖了所有主流发行版
# apt$aptinstalllazygit# pacman$sudopacman-Slazygit# dnf$ dnf coprenabledejan/lazygitWindows支持 Windows 10/11
# winget$ wingetinstall--idJesseDuffield.lazygit# scoop$ scoopinstalllazygit# choco$ chocoinstalllazygit安装完成后,在命令行终端输入 lazygit --version 查看安装状态,能正常打印版本消息标明安装成功
基本使用
命令行参数
在命令行终端输入 lazygit -h 查看命令行文档
lazygit提供了以下命令行参数:
-h|–help:显示带有可用标志、子命令和位置值参数的帮助信息
-p|–path: 指定要打开的Git仓库路径(等同于 --work-tree=–git-dir=/.git/)
-f|–filter: 在 git log – 中过滤的路径。在过滤模式下,提交记录、引用日志(reflog)和暂存栈(stash)将根据给定路径进行过滤,且某些操作会受到限制
-v|–version: 打印当前版本
-d|–debug: 以带有日志记录的调试模式运行
-l|–logs: 追踪(Tail)lazygit 日志(旨在当 lazygit --debug 在另一个终端标签页中调用时使用)。
–profile: 启动性能分析器(profiler)并在 http 6060 端口提供服务(详见 CONTRIBUTING.md)
-c|–config: 打印默认配置
-cd|–print-config-dir: 打印配置目录
-ucd|–use-config-dir: 使用提供的目录覆盖默认配置目录
-w|–work-tree: 等同于 git 的 --work-tree参数
-g|–git-dir: 等同于 git 的–git-dir 参数,主要用于非标准布局的项目仓库
-ucf|–use-config-file: 自定义配置文件的逗号分隔列表
-sm|–screen-mode: 初始屏幕模式,决定焦点面板的大小,有效选项:‘normal’ (默认)、 ‘half’、‘full’
快捷键
lazygit CLI提供了便捷的快捷键操作:
1)全局操作(Global)
?:打开帮助菜单
q:退出/返回
Q:强行退出 (不切换目录)
z:Undo (撤销上一步操作)
Z:Redo (重做上一步操作)
Tab/方向键:切换面板 (Files/Branches/Commits/Stash)
+ / _:循环切换窗口放大模式
/:Filter (搜索过滤当前面板内容)
2)文件面板 (Files Panel)
Space(空格键):Stage / Unstage (暂存/取消暂存单个文件)
a:暂存所有变更 (Stage all)
c:Commit (提交变更)
A:Amend (将当前暂存内容追加到上一次提交)
d:Discard (放弃单个文件的修改)
D:Reset (弹出重置选项菜单,如 Nuke 或 Hard Reset)
e:编辑文件 (使用默认编辑器)
i:将文件添加至 .gitignore
Enter:进入文件预览,可进行行级暂存
3)分支面板 (Branches Panel)
Space:Checkout (切换到选中分支)
n:创建新分支
d:删除分支
M:Merge (合并选中分支到当前分支)
r:Rebase (将当前分支变基到选中分支)
w:Worktree (基于选中分支创建工作树)
G:Open PR (在浏览器中打开 GitHub PR,需安装 gh)
i:显示 Gitflow 选项 (需安装 Gitflow)
4)提交记录面板 (Commits Panel)
p:Pull (拉取远程代码)
P:Push (推送代码到远程)
C:Cherry-pick (复制提交记录)
V:Cherry-pick Paste (粘贴/应用复制的提交)
i:Interactive Rebase (对选中提交启动交互式变基)
b:Bisect (开始二分查找调试)
W:Compare (标记该提交以进行差异对比)
5)变基/编辑模式 (Rebase mode)
s:Squash (压缩提交)
f:Fixup (修复提交,合并且不保留信息)
d:Drop (删除提交)
e:Edit (编辑提交)
Ctrl + k:将提交记录上移
Ctrl + j:将提交记录下移
启动lazygit
打开命令行终端cd到项目工作区,输入lazygit 即可启动命令行工具,启动后界面布局如下:
分支管理
1)创建分支
使用快捷键【Tab】或者左右箭头或者使用数字【3】切换到分支面板 (Branches Panel),然后使用快捷键【n】唤起分支菜单
输入分支名称回车创建一个新分支
使用【Enter】键可查看分支详情
2)切换分支
在分支面板使用上下键选中需要切换的分支
使用快捷键【Space(空格键)】即可切换分支
3)合并分支
切好到主分支,光标选中需要合并的分支(feat/login),然后使用快捷键【Shift+m】唤起合并菜单
选择合适的merge方式回车即可将分支合并到主分支
4)重置分支
如果在本地执行了 Merge,还没有把代码 Push 到远程仓库,可以使用 Undo功能撤销merge操作,直接使用快捷键【z】
如果 z 无法满足需求,或者想精准回退到某个版本,可以切换到提交记录面板使用快捷键【g】弹出重置选项菜单
选择重置模式回车,刚刚合并的变更就没了
5)删除分支
在分支面板,选中需要删除的分支,使用快捷键【d】唤起菜单
选择删除模式回车即可删除
代码管理
1)拉取代码
在分支面板使用快捷键【p】即可对当前分支执行pull操作
使用快捷键【f】可执行fetch操作
2)暂存代码
在项目中新建一个文件,可以在文件面板看到文件状态为【??】表示还未添加到工作区
使用快捷键【Space(空格键)】或者【a】将文件添加到工作区并暂存文件,可以在右下角【Command log】看到实时命令
3)放弃代码
在文件面板,使用快捷键【d】打开菜单
选择【Discard all changes】后,使用快捷键【Enter】或者双击即可放弃变更
4)提交代码
切换到分支面板,使用快捷键【c】填写提交信息
回车后即可在当前分支看到commit记录
使用快捷键【Shift+p】即可提交变更
Tag管理
1)创建Tag
1、在分支面板创建的Tag会以分支为基础创建
2、在Tags面板创建的Tag会以当前Tag为基础创建,会保留当前Tag的提交信息
在分支面板使用快捷键【Shift+t】或者切换到【Tags】使用快捷键【n】唤起Tag菜单
回车确定就创建了一个新的Tag
2)删除Tag
在分支面板切换到【Tags】,使用快捷键【d】唤起菜单
选择删除模式回车
Worktree
1)创建Worktree
选择分支面板,使用快捷键【w】创建Worktree,可以选择从主分支创建也可以选择从主分支某个Commit Hash创建
输入Worktree路径
输入分支名称
切换到文件面板,选中【Worktrees】可以看到刚刚创建的 ./worktrees/feat-login
2)删除Worktree
首先在分支面板切换到主分支
在文件面板切换到【Worktress】选择需要删除的Worktree,使用快捷键【d】
回车后Worktree就被删除了,注意这里只会删除Worktree并不会删除创建Worktree时创建的分支,如需删除分支需要单独删除
自定义命令
打开全局配置文件:
Linux: ~/.config/lazygit/config.yml
MacOS: ~/Library/Application\ Support/lazygit/config.yml
Windows: %LOCALAPPDATA%\lazygit\config.yml (default location, but it will also be found in %APPDATA%\lazygit\config.yml
这里我们在分支面板创建一个自定义命令,创建一个Tag并直接提交,使用快捷键【Shift+g】触发,在 config.yml文件中配置内容如下:
customCommands: - key:'G'# 改用 Shift + T 触发context:'localBranches'# 作用范围设为本地分支面板command:'git tag {{index .PromptResponses 0}} {{.SelectedLocalBranch.Name}} && git push origin {{index .PromptResponses 0}}'description:'为选中分支创建并推送 Tag'prompts: - type:'input'title:'输入 Tag 名称:'initialValue:'v'loadingText:'正在同步 Tag 到远程...'重启lazygit CLI,切换到分支面板使用快捷键【Shift+g】触发
我们也可以以此类推在提交记录面板自定义类似的Tag命令
customCommands: - key:'t'context:'commits'# 仅在 Commits 提交面板生效command:'git tag {{index .PromptResponses 0}}'description:'为选中的提交创建新标签'prompts: - type:'input'title:'输入 Tag 名称:'initialValue:'v1.0.'loadingText:'正在创建标签...'友情提示
见原文:Git命令行可视化管理工具:lazygit