深色模式
lazygit 使用入门
概述
lazygit 是一个运行在终端里的 Git TUI 工具。它不替代 git,而是把高频操作放进一个键盘驱动的界面里:看 diff、拆分暂存、提交、切分支、rebase、cherry-pick、处理 stash,都能在一个窗口里完成。
它最适合两类场景:一类是每天都要频繁提交,想把工作区状态看得更直观;另一类是经常要改写历史,但不想直接对着 git rebase -i 的 TODO 文件硬敲。
安装与启动
官方仓库给了很多安装方式,最常见的是下面两种:
sh
# macOS / Linux(Homebrew)
brew install lazygit
# Go
go install github.com/jesseduffield/lazygit@latest如果通过 go install 安装后命令找不到,通常需要把 ~/go/bin 加到 PATH 里。
进入一个 Git 仓库后,直接运行:
sh
lazygit如果习惯短命令,可以加一个别名:
sh
echo "alias lg='lazygit'" >> ~/.zshrc
source ~/.zshrc界面先认面板
刚打开 lazygit 时,不需要先背完整快捷键表,先认清这些面板更重要:
- 文件面板:看工作区和暂存区的文件变化。
- 本地分支面板:切换分支、变基、合并、设置上游。
- 提交面板:查看提交历史,做
rebase、fixup、cherry-pick。 stash面板:管理临时搁置的改动。- 主视图:显示 diff、提交文件列表、菜单或帮助信息。
- 底栏:显示当前面板可用的快捷键。
忘了怎么按时,直接按 ? 打开菜单。很多人第一次用 lazygit 最大的误区不是不会按,而是忘了它已经把提示写在屏幕底下了。
快捷键记法先看懂
官方文档里的按键记法有几个固定写法:
<c-x>:表示Ctrl + x- 大写字母:通常表示
Shift + 字母,例如P <enter>:回车<esc>:退出、返回或取消<tab>:在左右或上下子面板之间切换
另外要注意一点:lazygit 的快捷键可以自定义,下面整理的是官方当前默认键位。如果改过 config.yml,实际行为要以本地配置为准。
全局快捷键
这一组几乎在哪个面板都用得上,优先记。
| 按键 | 作用 | 说明 |
|---|---|---|
? | 打开菜单 | 查看当前上下文可用操作 |
q | 退出 | 正常退出 lazygit |
<esc> | 取消 / 返回 | 退出菜单、返回上一级 |
R | 刷新 | 重新读取 Git 状态,不等于 git fetch |
P | 推送 | 推送当前分支到上游 |
p | 拉取 | 从当前分支的远程上游拉取改动 |
f | 抓取 | 在文件面板中从远程抓取更新 |
: | 执行 Shell 命令 | 临时调一个 shell 命令 |
@ | 打开命令日志菜单 | 查看 lazygit 实际执行了什么 Git 命令 |
z | 撤销 | 基于 reflog 撤销最近一次 Git 级操作 |
Z | 重做 | 重做刚才撤销的 Git 级操作 |
m | 合并 / 变基菜单 | 合并或变基过程中查看继续、跳过、中止 |
W | diff 菜单 | 比较两个 ref,或切换比较方向 |
} / { | 调整 diff 上下文 | 增减 diff 里显示的上下文行数 |
) / ( | 调整重命名识别阈值 | 控制 rename 检测相似度 |
<c-w> | 切换空白字符 diff | 查看是否忽略空格差异 |
+ / _ | 切换屏幕模式 | 在正常、半屏、全屏间切换 |
| | 切换分页器 | 在配置的 pager 间轮换 |
<c-r> | 打开最近仓库 | 快速切回最近访问过的仓库 |
如果只打算先记 5 个,建议先记 ?、R、P、p、@。
列表导航快捷键
大多数侧边面板都共享这一组导航逻辑:
| 按键 | 作用 |
|---|---|
, / . | 上一页 / 下一页 |
< / > | 跳到顶部 / 跳到底部 |
/ | 搜索或过滤 |
[ / ] | 切换标签页 |
v | 开启范围选择 |
<s-up> / <s-down> | 向上 / 向下扩展选择 |
H / L | 主视图向左 / 向右滚动 |
0 | 聚焦主视图 |
/ 很值得常用。仓库大一点以后,靠手滚列表找提交、分支或文件,体验会很像在一堆抽屉里摸 U 盘。
文件面板快捷键
文件面板是日常使用最频繁的地方,重点基本都在这里。
| 按键 | 作用 | 说明 |
|---|---|---|
<space> | 切换当前文件暂存状态 | 整文件暂存 / 取消暂存 |
a | 切换所有文件暂存状态 | 一次处理整个工作区 |
<enter> | 进入暂存视图 | 继续细化到代码块或单行 |
c | 提交 | 提交当前已暂存内容 |
C | 用 Git 编辑器提交 | 适合写长一点的提交信息 |
w | 跳过 hook 提交 | 不运行预提交钩子 |
A | 修补最后一次提交 | 等价于 amend 最近一次提交 |
<c-f> | 查找适合 fixup 的基准提交 | 适合补旧提交 |
s | stash 所有改动 | 快速临时搁置 |
S | 打开 stash 选项 | 可选仅贮藏已暂存或未暂存改动 |
d | 放弃改动菜单 | 丢弃当前文件改动 |
D | 重置菜单 | 查看更激进的工作树清理选项 |
g | 上游重置选项 | 查看与上游比较和重置相关操作 |
f | 抓取远程变更 | 执行 fetch |
M | 合并冲突选项 | 处理冲突时常用 |
i | 忽略文件 | 直接为文件生成忽略规则 |
r | 刷新文件列表 | 更新当前文件面板 |
e | 用外部编辑器打开 | 跳到编辑器里改文件 |
o | 用默认程序打开 | 比如图片、PDF 这类文件 |
` | 切换文件树视图 | 平铺和树形之间切换 |
- / = | 折叠 / 展开目录 | 在树形视图里更好用 |
y | 复制文件信息 | 常用来复制路径 |
如果一个文件同时包含“这次要交”的改动和“暂时不想交”的改动,按 <enter> 进入暂存视图通常最省心。
暂存视图快捷键
进入文件 diff 之后,才是 lazygit 真正比命令行顺手的地方。
| 按键 | 作用 | 说明 |
|---|---|---|
<space> | 切换当前行暂存状态 | 单行暂存或取消暂存 |
a | 切换块模式 / 行模式 | 按 hunk 还是按行来选 |
v | 开启范围选择 | 连续选择多行 |
d | 丢弃或取消暂存 | 未暂存区里是丢弃,已暂存区里是取消暂存 |
<tab> | 切换已暂存 / 未暂存视图 | 在两个子视图之间跳转 |
E | 编辑当前代码块 | 用外部编辑器改选中的 hunk |
c | 提交 | 直接提交当前已暂存内容 |
C | 用 Git 编辑器提交 | 编写更完整的提交信息 |
w | 跳过 hook 提交 | 不跑 pre-commit |
<c-f> | 查找 fixup 基准提交 | 适合把当前改动补进旧提交 |
<esc> | 返回文件面板 | 退出逐行暂存界面 |
这一套基本可以看成 git add -p 的图形化加强版。尤其是跨多个函数改动时,认知负担会低很多。
提交面板快捷键
提交面板负责历史整理,是 lazygit 的另一块强项。
| 按键 | 作用 | 说明 |
|---|---|---|
i | 开始交互式 rebase | 从当前分支最近一段提交开始整理 |
e | 从选中提交开始编辑 | 相当于从该提交位置进入交互式 rebase |
s | squash 到下一个提交 | 保留消息并合并 |
f | fixup 到下一个提交 | 合并但丢弃当前提交消息 |
p | pick | 变基过程中保留该提交 |
d | 删除提交 | 通过变基把提交移除 |
r | 改写提交消息 | 直接修改提交 message |
R | 用编辑器改写提交消息 | 适合长文本 |
F | 创建 fixup 提交 | 基于当前提交生成修补提交 |
S | 自动压缩 fixup 提交 | 应用已有的 fixup! 提交 |
A | 修补到选中提交 | 用当前已暂存改动 amend 到旧提交 |
a | 修改提交属性 | 例如作者、共同作者 |
t | revert 提交 | 创建一条反向提交 |
T | 给提交打标签 | 直接从提交创建 tag |
C | 复制提交 | 为后续 cherry-pick 做准备 |
V | 粘贴提交 | 把复制的提交 cherry-pick 到当前分支 |
B | 标记 rebase 基准提交 | 用于 rebase --onto 一类场景 |
<c-j> / <c-k> | 下移 / 上移提交 | 调整 rebase 顺序 |
<space> | 检出到该提交 | 进入 detached HEAD |
g | 重置菜单 | soft / mixed / hard 重置 |
b | 二分查找菜单 | 开始 git bisect |
* | 选中当前分支的提交 | 更方便聚焦当前分支历史 |
<enter> | 查看提交文件 | 进入提交内文件列表 |
<c-l> | 日志菜单 | 调整排序、graph 显示方式 |
y | 复制提交属性 | 复制 hash、URL、消息等 |
o | 浏览器打开提交 | 远程仓库支持时可直接跳转 |
n | 从提交创建分支 | 基于该提交起新分支 |
N | 把未推送提交移到新分支 | 忘记先切分支时很好用 |
如果只是偶尔整理历史,最实用的组合通常是:i、s、f、A、C、V。
分支面板快捷键
本地分支面板负责切分支、重命名、上游配置、合并和变基。
| 按键 | 作用 | 说明 |
|---|---|---|
<space> | 检出分支 | 切到选中的分支 |
n | 新建分支 | 基于当前上下文创建 |
c | 按名称检出分支 | 可直接输入分支名 |
- | 切回上一个分支 | 很常用 |
F | 强制检出分支 | 会先丢弃本地工作区改动 |
r | 变基到选中分支 | 当前分支 rebase 到目标分支之上 |
M | 合并到当前分支 | 支持普通合并或 squash merge |
f | 快进到上游 | 让当前分支直接追到远端跟踪分支 |
u | 上游选项 | 设置、取消或重置上游 |
T | 创建标签 | 基于分支当前提交创建 tag |
R | 重命名分支 | 本地分支改名 |
d | 删除分支 | 查看本地 / 远程删除选项 |
o | 创建 Pull Request | 支持的托管平台上可直接发起 |
O | Pull Request 选项 | 更细的 PR 相关动作 |
<c-y> | 复制 PR URL | 快速分享链接 |
s | 排序 | 调整分支排序方式 |
g | 重置选项 | 对分支做 reset |
<enter> | 查看分支提交 | 进入该分支的提交列表 |
平时最常用的是 <space>、-、r、M、u。
stash、标签、远程相关快捷键
这些面板不是每天都高频使用,但一旦用到就很关键。
stash 面板
| 按键 | 作用 |
|---|---|
<space> | 应用 stash |
g | 应用并删除 stash |
d | 删除 stash |
n | 从 stash 创建新分支 |
r | 重命名 stash |
<enter> | 查看 stash 中文件 |
标签面板
| 按键 | 作用 |
|---|---|
<space> | 检出到标签 |
n | 新建标签 |
d | 删除标签 |
P | 推送标签 |
g | 重置到标签 |
<enter> | 查看标签对应提交 |
远程与远程分支面板
| 按键 | 作用 |
|---|---|
n | 新增远程 |
d | 删除远程或远程分支 |
e | 编辑远程 |
f | 抓取远程 |
F | 快速添加 fork 远程 |
<space> | 基于远程分支检出本地分支 |
M | 合并远程分支到当前分支 |
r | 把当前分支 rebase 到远程分支 |
u | 设置远程分支为上游 |
合并冲突时常用的快捷键
冲突场景下不用立刻退回命令行,lazygit 本身就能做一部分处理。
| 按键 | 作用 |
|---|---|
<left> / <right> | 切换上一个 / 下一个冲突 |
<up> / <down> | 选择顶部 / 底部区块 |
<space> | 选中当前区块 |
b | 选中所有区块 |
z | 撤销上次冲突解决 |
M | 冲突处理菜单 |
e | 用编辑器打开冲突文件 |
o | 用默认程序打开文件 |
<esc> | 返回文件面板 |
复杂冲突最终还是可能需要进编辑器,但 lazygit 至少先把冲突位置和上下文给你摆清楚了。
状态面板和配置文件
状态面板主要用来处理配置和最近仓库:
| 按键 | 作用 |
|---|---|
o | 用默认程序打开配置文件 |
e | 用编辑器打开配置文件 |
u | 检查更新 |
<enter> | 打开最近仓库 |
a / A | 切换所有分支日志显示方式 |
官方文档给出的全局配置路径是:
- Linux:
~/.config/lazygit/config.yml - macOS:
~/Library/Application Support/lazygit/config.yml - Windows:
%LOCALAPPDATA%\lazygit\config.yml
除了全局配置,还可以在仓库里写:
sh
<repo>/.git/lazygit.yml仓库级配置会覆盖全局配置。除此之外,父目录里的 .lazygit.yml 也会被加载,适合给一组仓库复用同一套规则。
怎么改快捷键
lazygit 的默认键位已经够顺手,但如果和终端、输入法、编辑器快捷键冲突,也可以直接改。
例如,关闭默认的“编辑文件”快捷键:
yaml
keybinding:
universal:
edit: ''再比如,把某些操作改成更符合个人习惯的按键:
yaml
keybinding:
universal:
undo: 'l'
diffingMenu: 'M'
files:
ignoreFile: 'I'
branches:
setUpstream: 'U'快捷键项很多,官方提供了完整键位配置说明。实际改动时建议只写自己要覆盖的那几项,不要把整份默认配置原样复制一遍。
一个顺手的日常流程
日常开发里,可以把 lazygit 当成下面这条轻量流程:
- 运行
lg进入仓库。 - 在文件面板用
<space>、a、<enter>处理暂存。 - 需要拆分提交时,在暂存视图用
a、v、<space>做到块级或行级选择。 - 用
c、C或A完成提交。 - 需要整理历史时,切到提交面板,用
i、s、f、A做交互式rebase。 - 需要搬运提交时,用
C和V做cherry-pick。 - 最后用
P推送到远端。
这样做的价值不是“以后完全不用 git 命令了”,而是把 80% 的高频 Git 操作集中在一个可视界面里。手还在键盘上,脑子里少记一堆参数,通常已经很够用。
