小伙伴们,大家好,我是小溪,见字如面。最近一直在使用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地址:github.com/jesseduffie...

核心优势
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安装
shell
# Homebrew
$ brew install lazygit
# MacPorts
$ sudo port install lazygit
Linux的支持非常全面,几乎涵盖了所有主流发行版
shell
# apt
$ apt install lazygit
# pacman
$ sudo pacman -S lazygit
# dnf
$ dnf copr enable dejan/lazygit
Windows支持 Windows 10/11
shell
# winget
$ winget install --id JesseDuffield.lazygit
# scoop
$ scoop install lazygit
# choco
$ choco install lazygit
安装完成后,在命令行终端输入 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文件中配置内容如下:
bash
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命令
bash
customCommands:
- key: 't'
context: 'commits' # 仅在 Commits 提交面板生效
command: 'git tag {{index .PromptResponses 0}}'
description: '为选中的提交创建新标签'
prompts:
- type: 'input'
title: '输入 Tag 名称:'
initialValue: 'v1.0.'
loadingText: '正在创建标签...'
友情提示
本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。友情提示友情提示