lazygit 是一个跑在终端里的 Git 界面:一个 21337088 字节的 exe,进到任意 git 仓库就能用。左边五块面板列出状态 / 文件 / 分支 / 提交 / stash,右边是 diff 与命令日志,改暂存、切分支和看历史都用单键。
它解决的是「记得住概念,记不住参数」这件事。git 的三区结构谁都懂,真要撤销一次误加的暂存,还得去翻 reset 和 restore 的区别。lazygit 把每个动作做成一个键,键位表在界面上按 ? 就能看。
这次从解压到出图完整跑了一遍:解压 0.26 秒,版本命令 358 到 403 毫秒,ConPTY 里启动到第一帧 3100 毫秒,30 个提交的仓库打开后五个面板都正常渲染。
一个 exe,五块面板
官方 zip 7574703 字节,解开只有三个文件:lazygit.exe、README.md 和一份 LICENSE。解压 0.26 秒,没有安装向导,不写注册表,也不需要装 Go 运行时。
| 文件 | 字节 | 作用 |
|---|---|---|
| lazygit.exe | 21337088 | 主程序,单文件 |
| README.md | 2477 | 官方说明 |
| LICENSE | 1070 | MIT |
| zip 整体 | 7574703 | 解压后 3 个文件 |
版本命令 0.36 秒,输出比预期长
lazygit --version 连跑三次分别是 403 毫秒、378 毫秒和 358 毫秒,第三次最快,说明第一次的差值来自系统缓存而不是程序本身。
# 三次耗时 403 / 378 / 358 毫秒
lazygit.exe --version
commit=63ab89fff478854deb4a35ef8902676b3cc5ca72, build date=2026-10-16T09:27:30Z,
build source=binaryRelease, version=0.66.2, os=windows, arch=amd64,
git version=2.55.0.windows.3
这一行里有三个字段值得看:build source 写 binaryRelease 表示是官方编译产物,git version 会取系统里那份 git,版本号则决定键位表有没有变化。
装之前先确认三件事
它体量小,但没有依赖清单,第一次用容易漏掉外部条件。下面三项是这个环境里实际成立的。
| 条件 | 本次实测值 | 不满足会怎样 |
|---|---|---|
| 系统 | Windows 10 22H2(19045.6466) | Win7 起不来,官方只给 x64 与 arm64 |
| 外部 git | 2.55.0.windows.3 | 没有 git.exe 直接报找不到仓库 |
| 终端 | conhost,132 列 34 行 | 列太窄时右侧 diff 会挤成一列 |
| 授权 | MIT | 仓库内商用可以,不用单独谈 |
它不打包 git,只调用系统里那份。这一点和前几篇测过的单文件工具不一样:exe 只有 21337088 字节,因为所有 git 操作都委托给外部命令完成。
启动到看见仓库 3100 毫秒
测量方法是开一个 ConPTY,从下令开始读输出流,直到出现状态栏里的 Status 字样为止。这个数含 cmd.exe 与 ConPTY 建立的开销,比纯程序启动要高一截。
| 环节 | 耗时毫秒 | 说明 |
|---|---|---|
| --version 第 1 次 | 403 毫秒 | 冷启动 |
| --version 第 2 次 | 378 毫秒 | 差 25 毫秒 |
| --version 第 3 次 | 358 毫秒 | 趋于稳定 |
| ConPTY 首帧 | 3100 毫秒 | 含 cmd 与 PTY 建立 |
首帧慢在画五个面板
第一次渲染要一次拉四份数据:工作区状态、文件列表和本地分支,加上提交历史。仓库里有 30 个提交和 3 个分支,四份查询在 3100 毫秒里占掉大半。
仓库变大会更明显。提交上千条时它会按页读取,滚动到第 2 页才开始取下一批,所以启动时间不会随历史线性增长。
五块面板各管什么
默认界面的左侧从 1 到 5 编号,按数字键直接跳过去。每块面板都有自己的单键动作,键位写在面板底部的提示条上。
| 编号 | 面板 | 实测内容 |
|---|---|---|
| 1 | Status | repo → master,显示当前分支与上游 |
| 2 | Files | 2 个改动加 1 个未跟踪文件 |
| — | 仓库规模 | 30 个提交、3 个分支 |
| 3 | Local branches | master、feature-a、feature-b 三条 |
| 4 | Commits | 29 条可见,底部写 1 of 29 |
| 5 | Stash | 空,底部写 0 of 0 |
面板之间按 1 到 5 直接跳
Tab 是往后翻,1 到 5 是直接定位。在 Files 面板里按空格暂存当前文件,这一条改动会从上面的 unstaged 区移到下面的 staged 区,右侧 diff 跟着变色。
实测那三个文件在界面上分别是 ?? newfile.txt、M notes.md,状态字符和 git status --short 的输出一致,没有另造一套符号。
界面语言默认跟着系统走
系统区域是中文时,它把界面画成中文:底部提示条写着「确认」「关闭」「复制到剪贴板」「捐赠」。第一次打开会以为下错了版本,其实是本地化生效了。
要英文界面就写一份配置,用 --use-config-file 指过去,不动全局设置。
gui:
language: en
nerdFontsVersion: ""
lazygit.exe --use-config-file config.yml
改完配置要重启进程
配置文件在启动时读一次,改完得退出再进。界面里按 q 退出,再执行同一条命令,提示条立刻变英文。中文界面上那几个词的位置会错位一两个字,英文界面更整齐。
nerdFontsVersion 留空是为了不用图标字体。装了 Nerd Font 再填版本号,分支和文件前面会多出图标,字符宽度会变化。
首次运行写两个文件
程序目录是干净的,用户数据落在 %LOCALAPPDATA%\lazygit。打开一次之后目录里就有两个文件。
| 文件 | 字节 | 内容 |
|---|---|---|
| config.yml | 0 | 空的用户配置,改设置时才写入 |
| state.yml | 149 | 最近仓库、版本号、弹窗状态 |
lastupdatecheck: 0
recentrepos:
- D:\wb_cache\b3\repo
startuppopupversion: 5
lastversion: 0.66.2
customcommandshistory: []
hidecommandlog: false
149 字节里最有用的两行是 recentrepos 与 lastversion。前者记着上次打开的仓库,后者决定升级后要不要弹「新版本有哪些变化」。想彻底重来,删掉这个文件就行,下次启动会按默认值重建。
提交一次改动要按几下
用实测那个仓库走一遍完整流程,按键次数是可以数出来的。改动暂存之后按 c 打开提交信息框,写完按回车确认。
| 按键 | 动作 | 界面变化 |
|---|---|---|
| 空格 | 暂存当前文件 | 文件从 unstaged 移到 staged |
| c | 打开提交信息框 | 底部弹出输入行 |
| 回车 | 确认提交 | Commits 面板顶部多一条 |
| P | 推送 | 状态栏出现 push 进度 |
| q | 退出 | 回到命令行 |
没配用户名时提交会失败
新机器上第一次提交,它会把 git 的报错原文贴在底部:提示 author identity unknown,让你先设 user.email 和 user.name。这两个值不在 lazygit 的配置里,得写进 git 的 config。
git config --global user.name "Your Name"
git config --global user.email [email protected]
四个真会遇到的卡点
打开后满屏中文,以为是汉化版
系统区域是 zh-CN 时它自动本地化,提示条那几个词会占掉两倍宽度。要英文就在 config.yml 里写 language: en,重启进程生效。
进了目录却说找不到仓库
必须从仓库根目录或它的子目录启动。在仓库外面运行,界面能开但 Files 面板是空的,底部提示 no repo。先 cd 到仓库再执行 exe,或者用 lazygit -p 路径 指定。
状态栏显示改了,diff 却是空的
文件被 .gitattributes 标成了 binary 时,界面只显示字节数不显示行级 diff。把该规则改掉,或者对这个文件用 git diff --text 单独看。
--use-config-file 指错路径直接退出
路径不存在时它不报错也不进界面,只闪一下。用绝对路径,并且在命令行里确认文件名是 config.yml 而不是 config.yaml。
什么场景值得上
天天提交、又不想背参数的人最合适。一个 21337088 字节的 exe 放进 PATH,30 个提交的仓库打开 3100 毫秒,比开图形客户端省内存。
远程服务器上更明显。SSH 进去只有终端,图形 Git 客户端根本起不来,lazygit 解压就能跑,这也是它最主流的用法。
反过来,只偶尔拉一次代码、从不改历史的人,装它意义不大。git status 和 git log 两条命令能覆盖的场景,多一层界面反而慢。
| 项目 | 数值 |
|---|---|
| exe 字节 | 21337088 |
| 示例仓库 | 30 个提交 / 3 个分支 |
| zip 字节 | 7574703 |
| 启动到首帧 | 3100 毫秒 |
| 一次提交的按键数 | 2 个(空格加 c) |








