lazygit:把 Git 操作从「背命令」变成「按键盘」

一款跑在终端里的 Git 图形界面。不用离开命令行,就能完成暂存、提交、变基、挑樱桃、解冲突——每个动作都是一两个按键。

如果你符合下面任意一条,这篇值得一读:

  • git add -p 的交互提示每次都要现查;

  • git rebase -i 一打开编辑器就手抖,怕改坏历史;

  • git stash list 查完编号,还要小心翼翼地敲 git stash pop stash@{2}

  • 觉得 SourceTree / Fork 这类 GUI 太重,但纯命令行又太琐碎。

lazygit 就是夹在中间的那个位置:它是 Git 的键盘优先前端,不是替代品。底层每个动作都对应一条真实的 git 命令,你甚至能让它把执行过的命令打印出来看。


一、安装(三分钟搞定)

# macOS / Linux(Homebrew)
brew install lazygit

# Windows(winget 或 Scoop)
winget install -e --id=JesseDuffield.lazygit
scoop bucket add extras && scoop install lazygit

# Arch
sudo pacman -S lazygit

# Debian 13+ / Ubuntu 25.10+
sudo apt install lazygit

# 任意平台(有 Go 环境)
go install github.com/jesseduffield/lazygit@latest

老版本 Ubuntu(22.04 / 24.04)官方源里的 lazygit 版本较旧,会缺不少新按键,建议直接从 GitHub Releases 下二进制,丢进 ~/.local/bin

验证:

lazygit --version

装完第一件事,设个别名:

# zsh
echo "alias lg='lazygit'" >> ~/.zshrc && source ~/.zshrc
# bash
echo "alias lg='lazygit'" >> ~/.bashrc && source ~/.bashrc

Windows PowerShell 用户:Add-Content $PROFILE 'function lg { lazygit $args }'

在任意 Git 仓库里敲 lg 即可启动。


二、界面:五个面板 + 一个主视图

启动后左边是五个侧边面板,右边是主视图(diff、日志等详情)。

编号

面板

作用

1

Status

仓库名、当前分支、整体状态

2

Files

工作区改动,暂存和提交的起点

3

Branches

本地分支、远程、标签(用 [ ] 切 tab)

4

Commits

提交历史,变基和挑樱桃的起点

5

Stash

暂存堆栈

导航键:

按键

动作

h / l

左右切换面板(方向键同样可用)

j / k

列表上下移动(方向键同样可用)

[ / ]

切换面板内的 tab

Enter

进入选中项

Esc

取消 / 返回上一层

0

聚焦主视图(看 diff)

/

在当前面板里搜索过滤

?

弹出当前面板的按键帮助

最重要的一点:同一个按键在不同面板里含义不同。 比如 d 在 Files 面板是「丢弃改动」,在 Commits 面板是「删除提交」,在 Stash 面板是「删除 stash」。拿不准就按 ?,它只列当前面板可用的键——这是 lazygit 最该记住的一个键。


三、先背这 8 个键,日常够用了

Files 面板

按键

动作

Space

暂存 / 取消暂存选中文件

a

一键暂存全部

c

提交(弹出提交信息输入框)

A

把已暂存的改动追加进上一个提交(git commit --amend

d

丢弃该文件的改动

s

stash 全部改动

p / P

拉取 / 推送

z

撤销上一步 Git 操作

就这八个,覆盖 80% 的日常。剩下的边用边查。


四、五个真实场景

场景 1:一个文件里只想提交其中几行

改了 200 行,其中 5 行是修 bug,剩下的都是调试日志——只提交那 5 行。

  1. Files 面板选中该文件,按 Enter 进入行级暂存视图;

  2. Space 暂存光标所在行(或所在 hunk);

  3. a 在「按行选择」和「按整块选择」之间切换;

  4. v 开启区域选择,一次性框选多行;

  5. Tab 在「已暂存 / 未暂存」两个视图间切换;

  6. 直接按 c 提交,或 Esc 回到 Files 面板。

想手动编辑某个 hunk(相当于 git add -p 里的 e),按 E

场景 2:把 5 个 WIP 提交合并成 1 个

走到 Commits 面板:

按键

动作

s

把选中提交合并进下面那个(保留两条 message)

f

同上,但丢弃选中提交的 message(fixup)

r

改写提交信息(reword)

d

删掉这个提交

e

从这个提交开始交互式变基(标记为 edit)

i

对分支提交启动交互式变基

Ctrl+k / Ctrl+j

把提交往上 / 往下挪

m

中止或继续进行中的变基

不用再在编辑器里手改 pick / squash 那堆行。

配合 review 工作流更爽的一套:在 Commits 面板选中你要补充的那个旧提交,按 F 直接创建一个 fixup! 提交;收尾时按 S 一次性把所有 fixup 应用掉(autosquash)。全程不用记旧提交的 hash。

场景 3:提交错了分支

在 main 上写了三个提交才想起来该开分支。切到 Branches 面板:

按键

动作

Space

检出选中分支

n

基于选中分支新建分支

N

把未推送的提交整体搬到一个新分支

-

回到上一个检出的分支

M

把选中分支合并进当前分支

r

把当前分支变基到选中分支

R

重命名分支

o

为选中分支创建 Pull Request

N 就是专门救这个场的:原生命令需要 git branch + git reset --hard 组合拳,这里一键。

场景 4:手滑删了提交

z

这是 lazygit 最值钱的一个键——基于 reflog 实现,误删提交、变基翻车、d 错了提交,都能救回来。撤销过头了就按 Z 重做。

注意:z 覆盖的是 Git 操作(提交、变基等),工作区文件改动不在其中。丢文件改动请用 Files 面板的 d 之外的手段。

场景 5:合并冲突

冲突发生时,在 Files 面板选中冲突文件按 Enter 进入冲突解决视图:

按键

动作

Space

采纳光标所在的那一侧(ours / theirs)

b

两侧都保留

z

撤销上一步冲突处理

M

整个文件级别的解决选项

m

中止或继续这次 merge / rebase


五、三个值得马上改的配置

配置文件位置不确定就跑 lazygit --print-config-dir,或者在 lazygit 里按 Alt+Shift+C 直接打开。常见路径:Linux ~/.config/lazygit/config.yml,macOS ~/Library/Application Support/lazygit/config.yml,Windows %LOCALAPPDATA%\lazygit\config.yml

(1)用 delta 让 diff 有语法高亮

先装 delta:

brew install git-delta      # macOS
cargo install git-delta     # 有 Rust 环境
git:
  paging:
    colorArg: always
    pager: delta --dark --paging=never

(2)指定外部编辑器(决定 e 键用哪个编辑器打开文件)

os:
  editPreset: 'vscode'   # 也支持 vim / nvim / sublime 等

(3)终端用 Nerd Font 的话,打开图标

gui:
  nerdFontsVersion: "3"

六、两个容易被忽略的彩蛋

@ —— 命令日志。 它会列出 lazygit 刚刚实际执行的 git 命令。想学 Git 又不知道某个操作对应什么命令,按一下就知道了。这也是为什么我说 lazygit 是「Git 的教材」。

: —— 命令模式。 直接在 lazygit 里敲任意 shell 命令执行,不用退出。


七、上手路径建议

别想着一次记全,按这个顺序来:

  1. 第一天:只用 SpacecP,外加 ? 随查;

  2. 第二天:加 aAd,把提交改顺手;

  3. 第一周:练熟 Commits 面板的 s / f / r,以及 z

  4. 第二周:玩 F + S 的 fixup 工作流,和 Branches 面板的 N

一天用下来,你会发现自己按 ? 的次数在下降,而敲 git 的次数下降得更快。


参考

  • 仓库:https://github.com/jesseduffield/lazygit

  • 下载页:https://lazygit.dev/download

  • 完整按键表:启动后按 ?,或官方文档 docs/keybindings/Keybindings_zh.md

本文基于 lazygit v0.5x–0.6x 系列按键编写,不同版本个别按键可能微调,以按 ? 看到的为准。