发布于
4322 字 · 22 分钟

Lazygit 完全指南:终端里的 Git 可视化操作

AI 摘要

作者
  • avatar
    姓名
    Corner430
    社交账号
题图

1 前言

Lazygit 是一个终端 Git 可视化工具(TUI),用 Go 编写,GitHub 75k+ stars。它把 git add、交互式变基、冲突解决、Cherry-Pick 等操作全部变成快捷键,不用再记命令参数。LazyVim 用户按 <leader>gg 即可在浮动窗口中直接使用。

前置条件:已安装 Git 并完成基本配置(user.nameuser.email)。

2 Git 基础回顾

2.1 四大区域

Git 四大区域
区域说明对应命令Lazygit 操作
工作区 (Working Directory)你正在编辑的文件Files 面板查看
暂存区 (Staging Area)git add 后的文件git addspace 暂存
本地仓库 (Local Repository)git commit 后的记录git commitc 提交
远程仓库 (Remote Repository)git push 后的代码git pushP 推送

Lazygit 的 Files 面板对应工作区和暂存区,Commits 面板对应本地仓库,Remotes 标签对应远程仓库。

2.2 命令行 → Lazygit 对照

Git 基本工作流
命令行Lazygit 操作
git status打开 Lazygit 即可看到
git diff选中文件自动显示差异
git add .a(暂存全部)或 space(暂存单个文件)
git commit -m "msg"c → 输入消息 → Enter
git pushP(大写)
git pullp(小写)
git logCommits 面板实时显示

记住这张表,后面的内容会反复用到这些快捷键。

3 安装与配置

3.1 各平台安装

macOS(Homebrew)

brew install lazygit

Ubuntu / Debian

LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | \grep -Po '"tag_name": *"v\K[^"]*')
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/download/v${LAZYGIT_VERSION}/lazygit_${LAZYGIT_VERSION}_Linux_$(uname -m | sed 's/aarch64/arm64/').tar.gz"
tar xf lazygit.tar.gz lazygit
sudo install lazygit -D -t /usr/local/bin/

Arch Linux

sudo pacman -S lazygit

Go 安装(任何平台):

go install github.com/jesseduffield/lazygit@latest

验证安装

lazygit --version

3.2 基础配置

Lazygit 的配置文件位于 ~/.config/lazygit/config.yml(Linux/macOS)。

常用配置项:

gui:
  language: zh-CN # 中文界面
  showRandomTip: false # 关闭启动提示
  nerdFontsVersion: '3' # 使用 Nerd Fonts 图标
  theme:
    activeBorderColor:
      - green
      - bold

os:
  editCommand: nvim # 外部编辑器

git:
  autoFetch: true # 自动 fetch(大仓库可关闭)
  paging:
    colorArg: always
    pager: delta --dark --paging=never # 使用 delta 作为 diff 工具(可选)
配置项说明默认值
gui.language界面语言en
gui.showRandomTip启动时显示提示true
gui.nerdFontsVersionNerd Fonts 版本""
os.editCommand外部编辑器""
git.autoFetch自动 fetchtrue
git.diffContextSizediff 上下文行数3

3.3 Shell 别名

推荐设置简短别名,加到 ~/.bashrc~/.zshrc

alias lg='lazygit'

如果你希望退出 Lazygit 时自动切换到对应目录(在工作树间切换时特别有用):

lg() {
    export LAZYGIT_NEW_DIR_FILE=~/.lazygit/newdir
    lazygit "$@"
    if [ -f $LAZYGIT_NEW_DIR_FILE ]; then
        cd "$(cat $LAZYGIT_NEW_DIR_FILE)"
        rm -f $LAZYGIT_NEW_DIR_FILE > /dev/null
    fi
}

4 界面概览

在任意 Git 仓库中运行 lazygit(或 lg),你会看到如下布局:

Lazygit 界面布局

4.1 五大面板

Lazygit 的界面由左侧的五个面板和右侧的主视图组成:

面板快捷键功能
Status(状态)1当前仓库信息、分支名称
Files(文件)2工作区文件变更、暂存操作
Branches(分支)3本地分支、远程分支、标签
Commits(提交)4提交历史、变基、拣选
Stash(贮藏)5贮藏列表管理

4.2 面板导航

操作快捷键
切换面板h / l 或数字键 1-5
面板内上下移动j / k 或方向键
切换子标签(如分支面板内的本地/远程/标签)[ / ]
搜索 / 过滤/
切换屏幕模式(正常/半屏/全屏)+ / _
打开帮助菜单?
退出 Lazygitq

4.3 主视图

右侧的主视图会根据左侧选中项目自动显示对应内容:

  • 选中文件 → 显示 diff
  • 选中提交 → 显示提交详情和变更
  • 选中分支 → 显示分支提交日志

Enter 可以进入更详细的视图(如逐行查看文件差异),按 0 可以聚焦主视图进行滚动。

5 核心操作

5.1 查看文件状态与差异

进入 Lazygit 后,Files 面板会自动显示所有已修改的文件(对应 git status)。

  • j / k 在文件间移动,右侧自动显示 diff
  • Enter 进入文件的逐行视图
  • { / } 调整 diff 上下文显示范围(显示更多或更少的周围代码)
  • ` 切换文件树视图(平铺 / 树形)

5.2 暂存与提交

这是 Lazygit 最常用的操作,对应命令行的 git add + git commit

文件级暂存

操作快捷键
暂存 / 取消暂存单个文件space
暂存 / 取消暂存所有文件a

行级暂存(精确控制提交内容):

  1. 在 Files 面板选中文件,按 Enter 进入逐行视图
  2. space 暂存/取消暂存当前行
  3. v 开启范围选择模式,用 j/k 选择多行,再按 space 暂存
  4. a 暂存/取消暂存整个代码块(hunk)
  5. Tab 切换查看已暂存/未暂存的变更
  6. Esc 退出逐行视图

提交

操作快捷键
提交暂存的文件c -> 输入消息 -> Enter
修补上次提交(amend)A
跳过 pre-commit hook 提交w
使用外部编辑器编写提交消息C(大写)

5.3 推送与拉取

操作快捷键对应命令
推送P(大写)git push
拉取p(小写)git pull
抓取(仅获取不合并)fgit fetch

注意 Pp 的大小写区别!推送用大写,拉取用小写。

如果当前分支没有设置上游分支,Lazygit 会弹出窗口让你选择远程仓库和分支名称。

5.4 撤销与重做

Lazygit 基于 git reflog 提供全局撤销,按 z 撤销、Z 重做,可以回退提交、变基、合并等操作。工作区和贮藏的变更不在撤销范围内

其他常用撤销操作:Files 面板按 d 丢弃文件修改,space 取消暂存;Commits 面板按 g 打开 reset 选项,t 执行 revert。

6 分支管理

3 或用 h/l 切换到 Branches 面板。该面板有三个子标签,用 [ / ] 切换:

  • Local Branches:本地分支
  • Remotes:远程仓库及其分支
  • Tags:标签管理

6.1 创建与切换分支

操作快捷键对应命令
检出分支spacegit checkout <branch>
创建新分支ngit checkout -b <name>
按名称检出cgit checkout <name>(支持输入 - 切换上一个分支)
切换上一个分支-git checkout -
强制检出(丢弃本地修改)Fgit checkout -f <branch>
重命名分支Rgit branch -m <new-name>

6.2 合并与变基

操作快捷键说明
合并到当前分支M弹出菜单选择正常合并或 squash 合并
变基当前分支到所选分支rgit rebase <selected-branch>
快进当前分支fgit merge --ff-only

合并 vs 变基

  • 合并M):保留完整的分支历史,创建合并提交
  • 变基r):将当前分支的提交"移动"到目标分支之上,产生线性历史

6.3 删除分支

选中要删除的分支,按 d,Lazygit 会弹出菜单让你选择:

  • 仅删除本地分支(对应 git branch -d
  • 仅删除远程分支(对应 git push origin --delete
  • 同时删除本地和远程分支

如果分支有未合并的提交,Lazygit 会提示你确认是否强制删除。

6.4 远程分支

] 切换到 Remotes 子标签:

操作快捷键说明
查看远程分支列表Enter进入远程仓库查看分支
检出远程分支space自动创建本地追踪分支
设置上游分支u在 Local Branches 中使用
添加远程仓库n在 Remotes 标签按 n
删除远程仓库d仅删除本地配置
编辑远程仓库 URLe修改 remote URL
抓取远程仓库fgit fetch <remote>

7 交互式变基

命令行中 git rebase -i 需要在编辑器里手写 pick/squash/fixup 指令,而 Lazygit 把这一切变成了快捷键。

交互式变基流程

7.1 基本操作

在 Commits 面板(按 4),你可以直接对提交执行变基操作:

按键操作说明
ssquash将选中提交压缩到其下方的提交中,消息合并
ffixup同 squash,但丢弃选中提交的消息
ddrop删除选中的提交
eedit在此提交处暂停变基,允许修改
ppick保留提交(默认状态)
rreword修改提交消息
ctrl+j下移将提交在历史中下移
ctrl+k上移将提交在历史中上移

这些操作会自动启动交互式变基。Lazygit 在后台处理所有复杂性,你只需专注于想做什么。

7.2 高级用法

操作快捷键说明
启动交互式变基i对当前分支所有提交启动变基
标记基准提交B设置变基的起点(只变基部分提交)
创建 fixup 提交F创建一个 fixup! 前缀的提交
自动压缩 fixup 提交S自动将所有 fixup! 提交压缩到对应的提交
修补旧提交A将当前暂存的变更合并到选中的旧提交中

7.3 实战场景

场景 1:提交消息写错了

在 Commits 面板找到那条提交,按 r,修改消息后 Enter 确认。

场景 2:多个小提交合并为一个

  1. shift+下 选中要合并的多个连续提交
  2. s(squash)将它们压缩为一个
  3. 编辑合并后的提交消息

场景 3:删除中间某个不需要的提交

在 Commits 面板找到那条提交,按 d(drop)。如果后续提交依赖了该提交的修改,可能需要解决冲突。

场景 4:调整提交顺序

选中要移动的提交,用 ctrl+k(上移)或 ctrl+j(下移)调整位置。

8 高级功能

8.1 Cherry-Pick(拣选)

Cherry-Pick 可以将其他分支的特定提交复制到当前分支:

  1. 切换到源分支,在 Commits 面板找到目标提交
  2. C(大写)复制该提交(可复制多个)
  3. 切换回目标分支
  4. V(大写)粘贴(Cherry-Pick)
  5. Esc 取消选择(重置拣选列表)

8.2 Bisect(二分查找)

当你知道某个 bug 是在某次提交引入的,但不确定是哪一次时,二分查找非常有用:

  1. 在 Commits 面板按 b,打开二分查找菜单
  2. 标记当前提交为 bad(有 bug)或 good(无 bug)
  3. Lazygit 自动跳转到中间的提交,让你继续标记
  4. 重复标记直到定位到引入 bug 的那次提交

这比手动 git bisect 直观得多。

8.3 Stash(贮藏)

贮藏功能可以暂时保存未提交的修改,切换到其他工作后再恢复:

在 Files 面板创建贮藏

操作快捷键
快速贮藏所有变更s
查看贮藏选项S

贮藏选项包括:贮藏所有变更、仅贮藏已暂存的、仅贮藏未暂存的。

在 Stash 面板管理贮藏(按 5):

操作快捷键
应用贮藏(保留)space
应用并删除贮藏g
删除贮藏d
从贮藏创建新分支n
重命名贮藏r

8.4 Worktrees(工作树)

工作树允许你在同一仓库中同时检出多个分支到不同目录,无需来回切换和 stash:

  • 在 Branches 面板按 w 打开工作树选项
  • 选择创建新工作树,指定分支和路径
  • 使用 Enter 切换到其他工作树
  • d 删除不再需要的工作树

8.5 自定义补丁(Rebase Magic)

这是 Lazygit 最独特的功能之一——从旧提交中提取或移除特定的代码改动:

  1. 在 Commits 面板选中目标提交,按 Enter 查看文件
  2. 选中文件,按 Enter 进入逐行视图
  3. space 选择要操作的行,添加到自定义补丁
  4. ctrl+p 打开自定义补丁选项:
    • 从该提交中移除选中的改动
    • 将选中的改动拆分为新提交
    • 将补丁反向应用到暂存区

8.6 自定义命令

Lazygit 支持在配置文件中定义自定义命令,扩展其功能。

~/.config/lazygit/config.yml 中添加:

customCommands:
  - key: '<c-p>'
    description: '推送到所有远程仓库'
    command: 'git remote | xargs -I {} git push {} {{.SelectedLocalBranch.Name}}'
    context: 'localBranches'
    loadingText: '推送中...'

你还可以在 Lazygit 中按 : 直接执行任意 Shell 命令。

9 冲突解决

合并、变基、Cherry-Pick 都可能产生冲突。Lazygit 的冲突解决界面比命令行直观得多:

冲突解决

冲突发生时,Files 面板会显示冲突文件。选中后按 Enter 进入冲突解决视图,界面高亮显示 ours 和 theirs 两个版本:

操作快捷键
选择当前区块space
选择所有区块b
在同一冲突的区块间移动 /
在不同冲突间移动 /
撤销冲突解决z
在外部编辑器中编辑e

所有冲突解决后,按 m 打开选项菜单,选择「继续」完成操作;或选择「中止」放弃。

10 LazyVim 集成

LazyVim 通过 lazygit.nvim 内置了 Lazygit 集成,开箱即用。工作流:编写代码 → <leader>gg 打开 Lazygit → 暂存、提交、推送 → q 回到编辑器,全程不离开终端。

在 Lazygit 中按 e 编辑文件会调用外部编辑器,LazyVim 环境下通常已自动配置为 Neovim。如需手动设置,在 ~/.config/lazygit/config.yml 中添加 os.editCommand: nvim

快捷键功能
<leader>gg打开 Lazygit
<leader>gfLazygit 文件日志
<leader>glLazygit 日志
<leader>gbGit Blame

11 补充技巧

11.1 Tag 管理

在 Branches 面板按 ] 切换到 Tags 子标签:

操作快捷键说明
创建标签n输入标签名
删除标签d弹出菜单选本地/远程
推送标签P推送到远程
检出标签space分离 HEAD 到标签对应提交

在 Commits 面板中也可以为特定提交创建标签:选中提交后按 T

11.2 双远程推送

在 Lazygit 的 Remotes 标签中按 n 添加第二个远程仓库(如 Gitee),之后可以分别对不同远程进行 fetch 和 push。

如果想一次 P 推送到多个平台,可以用 git remote set-url --add origin <第二个地址> 为 origin 添加多个推送地址,或者通过 Lazygit 的自定义命令实现。

12 常见问题

问题原因解决方案
Lazygit 在大仓库中启动慢自动 fetch 耗时配置 git.autoFetch: false
Lazygit 中文显示乱码终端 locale 不正确确保 LC_ALL=en_US.UTF-8zh_CN.UTF-8
push 仍需密码remote 是 HTTPSgit remote set-url origin git@...
误操作后想恢复z 全局撤销,或 Commits 面板 g reset
提交时报「未合并文件」错误存在未解决的冲突解决冲突后暂存,按 m 选择继续

13 快速参考

13.1 全局快捷键

按键作用
P推送
p拉取
z / Z撤销 / 重做
?帮助菜单
R刷新 Git 状态
:执行 Shell 命令
+ / _切换屏幕模式
WDiff 对比菜单
m合并/变基选项
q退出
1-5切换面板
/搜索/过滤
@命令日志
{ / }调整 diff 上下文范围

13.2 Files 面板

按键作用
space暂存/取消暂存
a全部暂存/取消
c提交
A修补上次提交
Enter进入逐行视图
d放弃变更
s / S贮藏 / 贮藏选项
e在编辑器中打开
i添加到 .gitignore
D重置工作树
M合并冲突选项
f抓取远程

13.3 Commits 面板

按键作用
ssquash(压缩)
ffixup(修正)
ddrop(删除)
eedit(编辑)
rreword(改写消息)
i开始交互式变基
ctrl+j / ctrl+k上下移动提交
C复制提交(拣选)
V粘贴提交(Cherry-Pick)
A修补旧提交
b二分查找
B标记基准提交
T创建标签
t撤销提交(revert)
g重置选项
y复制提交属性

13.4 Branches 面板

按键作用
space检出
n新建分支
d删除
M合并到当前分支
r变基
f快进
R重命名
u上游设置
-切换上一个分支
w工作树选项

13.5 Stash 面板

按键作用
space应用贮藏
g应用并删除
d删除
n从贮藏创建分支
r重命名

13.6 冲突解决

按键作用
space选择区块
b选择所有区块
/ 区块间移动
/ 冲突间移动
z撤销解决
e在编辑器中打开
M更多合并选项

14 参考链接

版权声明

除非另有说明,本文内容采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处。