LazyGit:Git 终端可视化的日常操作指南
posts posts 2026-04-12T02:29:31+08:00LazyGit 是 Go 编写的 Git 终端 UI,用面板把暂存、提交、分支、变基、冲突解决等操作可视化。本文从安装配置讲起,按面板介绍常用快捷键,一步步走通提交、变基和冲突解决的完整流程。技术笔记Git, Go, 终端, TUILazyGit:Git 终端可视化的日常操作指南
LazyGit 解决的问题很具体:Git 命令行能做所有事,但交互式变基(interactive rebase)、逐行暂存、Cherry-pick 这类操作要记一堆参数,敲错了只能重来。LazyGit 把这些操作放进一个终端里的 TUI(Text User Interface,文本用户界面),用面板分开展示,按一个键就执行对应的 git 命令。
它没有重新实现 Git,而是把你常用的 Git 操作封装成不到一两个按键的动作,并实时展示执行结果。本文针对「已经会用 git,想在日常开发里取代命令行」的读者,按面板介绍快捷键,再带你把提交、变基、冲突解决走一遍。
前置条件
- 已安装 Git(macOS 与 Linux 建议 2.32 及以上;Windows 用户可通过官方安装包获取)
- 能打开终端,基本会用
cd、git status
一、项目概况
1.1 它到底是什么
LazyGit 是一个开源的 Git 终端 UI,用 Go 编写,基于 gocui 绘制界面。它自己不处理 Git 的底层逻辑,而是通过内部命令层调用系统的 git 可执行文件来完成实际操作——你在界面上做的每一步,对应的都是一条真实的 git 命令。
这样做的好处是行为与命令行完全一致:LazyGit 显示的分支、提交、状态就是 git 的输出,不引入另一套语义。它替你省下的是「记忆命令 + 敲参数」这部分,而不是改变 Git 本身的行为。
1.2 数据口径
以下数据从 GitHub 仓库两次调用中核对,供参考。Stars、Forks 会随时间增长,以仓库页面为准。
| 指标 | 数值(2026-08 核实) |
|---|---|
| 语言 | Go |
| 开源协议 | MIT |
| Stars | 约 8.2 万 |
| Forks | 约 3,000 |
| 最新稳定版 | v0.64(2026-08 发布) |
二、安装与启动
按你的平台选择一种即可。装好后在任一 Git 仓库目录里运行 lazygit 就能进入界面;不在仓库目录里运行会提示找不到 Git 仓库。
2.1 macOS
brew install lazygit2.2 Linux
Ubuntu / Debian:无官方 apt 包时,走 GitHub Releases 下载预编译二进制。仓库
Releases页面提供lazygit_<版本>_Linux_x86_64.tar.gz,解压后放入PATH:sudo install lazygit /usr/local/binArch 及其衍生:AUR 里可直接安装:
yay -S lazygit其他发行版:同样使用 Releases 页面下载对应架构的压缩包即可,也可用官方
brew.sh的 Linux 版。
2.3 从源码安装
适合想改代码或跟进最新分支的场景:
go install github.com/jesseduffield/lazygit@latest装完确认二进制在 PATH 中。Go 版本过低或环境变量未配好时,可先看 go env GOPATH 把对应的 bin 目录加入 PATH。
2.4 Windows
通过 Winget 或 Scoop 安装:
winget install JesseDuffield.LazyGit
# 或
scoop install lazygit三、界面与导航
3.1 五个面板
LazyGit 启动后界面主要分成五个面板,用数字键或 Tab 切换:
| 数字键 | 面板 | 作用 |
|---|---|---|
1 | 状态(Status) | 仓库信息、当前分支、检查更新 |
2 | 文件(Files) | 工作区改动:暂存区与未暂存文件的增删改 |
3 | 分支(Local Branches) | 本地分支,Enter 查看某分支的提交 |
4 | 提交(Commits) | 提交历史,Enter 查看某次提交改动的文件 |
5 | 储藏(Stash) | 储藏(stash)列表 |
主面板在右侧,展示当前选中条目的 diff(差异)或操作预览。任意时刻按 ? 打开当前面板的快捷键帮助。
3.2 通用快捷键
这些键在任何面板都有效:
| 键 | 动作 |
|---|---|
? | 打开 / 关闭当前面板快捷键菜单 |
q | 退出 |
Tab / 数字键 | 切换面板 |
↑↓ 或 jk | 上下移动选中项 |
Enter | 进入选中项(如查看某提交改了什么) |
/ | 在当前面板内按文本搜索 |
: | 执行一条自定义 shell 命令 |
z | 撤销上一次 Git 操作(借助 reflog,试验性) |
四、文件面板:暂存与提交
文件面板是你最常用的地方,展示所有未提交的改动。选择文件用 space 切换暂存状态,Enter 进入逐行(line-by-line)暂存视图——这是 LazyGit 比命令行 git add -p 顺手的地方。
| 键 | 动作 |
|---|---|
space | 暂存 / 取消暂存当前文件 |
a | 暂存 / 取消暂存全部文件 |
Enter | 进入逐行暂存视图(按 hunk 或单行暂存) |
Enter(目录上) | 展开 / 收起目录 |
s | 储藏全部改动(进入储藏面板) |
d | 放弃当前文件的改动(弹出选项) |
D | 重置 / 放弃全部改动(弹出选项) |
c | 提交暂存的改动 |
w | 提交暂存的改动(跳过 pre-commit 钩子) |
A | 用已暂存的改动补充到最近一次提交(amend) |
e | 用系统编辑器打开当前文件 |
i | 把当前文件加入 .gitignore |
M | 打开外部合并工具(git mergetool)解决冲突 |
逐行暂存视图里,space 暂存光标所在的块或行,s(小写)保存并返回。这一模式适合做「只提交某个改动的一小部分」这种事。
五、提交面板:历史与变基
提交面板列出提交历史。它最强大的能力是交互式变基(interactive rebase)——在历史里选定一个起点,然后用一组键对每个提交做 pick / reword / squash / fixup,边看 diff 边改历史。
| 键 | 动作 |
|---|---|
Enter | 查看选中提交改动的文件清单 |
r | 修改某提交的提交信息(reword) |
s | 把当前提交压缩到上一个(squash) |
f | 把当前提交标记为 fixup(合并但丢弃信息) |
d | 删除当前提交 |
e | 从该提交开始进入交互式变基 |
n | 基于该提交新建分支 |
c | 复制当前提交(Cherry-pick) |
v | 粘贴已复制的提交(Cherry-pick) |
A | 用暂存改动补充最近一次提交(amend) |
5.1 交互式变基流程
要压缩最近三个提交为一个:
- 进入提交面板(
4),选中倒数第三个提交。 - 按
e进入以它为基点的交互式变基界面。该提交及其之后的提交会列出来。 - 在列表中选中一个提交后,按以下键改它的动作:
ppick(保留)、rreword(改成提交信息)、ssquash(合并到上一个)、ffixup(合并但丢信息)、ddrop(丢弃)。 - 全部设置好后按
enter拉出确认弹窗,确认后 LazyGit 执行git rebase并回到提交面板。
变基途中若想放弃,按 m 打开变基选项菜单,选择 Abort 即可回到起点状态。
5.2 Cherry-pick 流程
- 在提交面板选中要复制的提交,按
c。 - 切到目标分支,回到提交面板按
v,选中仓库粘贴。选中项会被复制为一次新提交。
六、分支面板
分支面板处理本地分支与远程跟踪。space 是切换分支最常用的动作。
| 键 | 动作 |
|---|---|
space | 切换(checkout)到选中分支 |
n | 新建分支 |
c | 按名字输入并切换到某分支 |
r | 把当前分支变基到选中分支上 |
M | 把选中分支合并进当前分支 |
d | 删除选中分支 |
R | 重命名分支 |
u | 设置 / 取消上游跟踪(upstream) |
f | 从上游快进当前分支 |
T | 为选中分支打标签 |
实际项目多用「分支 + Rebase」而非频繁合并:切到功能分支,在分支面板按 r 变基到 main,解决了冲突再推上去,历史是线性的,干净。
七、储藏面板
储藏(stash)用于把当前改动临时收起来,切换到别的分支再取回。
| 键 | 动作 |
|---|---|
space | 应用选中的储藏(不删除它) |
g | 应用并移除选中的储藏(pop) |
d | 删除选中的储藏 |
在文件面板按 s 会创建一个储藏并跳到储藏面板;之后随时到这里 g 取回。
八、配置
默认配置通常够用,只有想改主题或默认行为时才需要写配置文件。
8.1 配置文件位置
| 平台 | 全局配置文件 |
|---|---|
| Linux | ~/.config/lazygit/config.yml |
| macOS | ~/Library/Application Support/lazygit/config.yml |
| Windows | %LOCALAPPDATA%\lazygit\config.yml |
另外支持仓库级配置:放在仓库内的 .git/lazygit.yml 只对该仓库生效;放在仓库的某个上级目录、命名为 .lazygit.yml,则对该目录下的所有仓库都生效,适合给一组相关项目统一设置。仓库级配置会覆盖全局配置。
8.2 常用配置项
gui:
# 选中行与活动边框的颜色
theme:
activeBorderColor: [green]
selectedLineBgColor: [blue]
git:
paging:
color: always配置是覆盖式的:只写你想改的键,其余用默认值。官方文档的 Config.md 列出了全部可配置项,改之前先去那里确认某个键的准确名称,避免填了无效字段。
8.3 命令别名
在 ~/.gitconfig 里加两行,之后用 git lg 快速进入:
[alias]
lg = lazygit九、常见问题
9.1 启动时报找不到 Git 仓库
在非 Git 目录里运行会报错。进入仓库目录再启动,或用 lazygit --path <仓库路径> 指定。
9.2 后台开着的终端卡住、方向键无反应
LazyGit 启动时会显示一个提示弹窗并要求确认(内容包含赞助与使用提示)。方向键没反应通常是因为焦点在提交信息或搜索输入框里,先按 Esc 退出输入,再操作列表。
9.3 想撤销上一步操作
按 z,LazyGit 通过 reflog 推断上一条 Git 命令并回退。注意它覆盖的是提交类操作,工作区里未提交的改动不会被撤销,别用它处理文件内容层面的误删。
9.4 合并冲突怎么处理
冲突发生时,冲突文件会出现在文件面板。用 Enter 进入冲突的文件,主面板会展示冲突段落;按 m 打开合并选项,或用外部合并工具(M)解决。每解决完一个文件,用 space 暂存它标记为已解决,最后提交。具体冲突段的选择可用 e 打开编辑器手动改。
9.5 版本和快捷键对不上
LazyGit 迭代较快,个别键位会变。以界面内 ? 实时帮助为准,其次是官方 Keybindings_en.md。本文章程以 v0.64 为准。
十、自测
1. 文件面板里,space 和 a 各自做什么?进入逐行暂存视图的键是哪个?
参考答案
space 暂存或取消暂存当前选中的文件;a 暂存或取消暂存全部文件。Enter(选中某个文件时)进入逐行暂存视图。
2. 想把最近三次提交压缩成一个,完整操作顺序是什么?
参考答案
进入提交面板,选中从底部数第三个提交;按 e 进入交互式变基;把最后两个提交的动作改为 s(squash,或 f fixup);Enter 确认并完成变基。
3. 你在功能分支上,想把主分支的改动并到自己这边,用分支面板的哪个键?与 M 有何不同?
参考答案
按 r 把当前分支变基到选中分支(这里选中主分支);M 是把选中的分支合并进当前分支。前者重写历史为线性,后者保留合并提交。
4. 一个文件既有你不想提交的改动,也想提交其中一部分,怎么做?
参考答案
在文件面板选中该文件按 Enter 进入逐行暂存视图,用 space 只暂存想提交的块或行,回到文件面板按 c 提交,剩下的改动留在工作区。
练习
练习 1:在任意仓库里完成一次「暂存 → 提交 → 推送」。要求:只用 space、c、P(P 是 push,p 才是 pull)完成,不敲一条 git commit、git push。
练习 2:在提交面板,把最近两次提交压缩成一个 fixup 再改提交信息。确认历史从三条变成一条。
练习 3:用 z 撤销练习 2 的提交操作,确认提交历史恢复到压缩前。
资料口径
本文数据与快捷键基于官方 GitHub 仓库 jesseduffield/lazygit 的 README、官方 Keybindings_en.md 与仓库 Releases 页面(v0.64,2026-08 核实)。Stars、Forks 随时间增长;键位随版本演进,以界面内 ? 帮助为最终依据。未验证的功能未写入本文,性能类描述来自二手资料、不给出具体数字。
相关资源
- 官方仓库:https://github.com/jesseduffield/lazygit
- 官方快捷键文档:https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings/Keybindings_en.md
- 官方配置文档:https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md
- 更新日志:https://github.com/jesseduffield/lazygit/releases
参与讨论
使用 GitHub 登录。欢迎补充事实、异议与实践。
讨论暂时无法加载。