Lazygit 终端 Git 客户端¶
为什么要学 Lazygit¶
Lazygit 是一个终端中的 Git 图形界面,用 Go 编写。它将 Git 的复杂命令行操作转化为直观的交互式界面——分支管理、暂存/取消暂存、提交、变基、合并冲突解决、Cherry-pick 等操作都可以通过简单的键位完成。对于喜欢终端但又被 Git 命令行折磨的开发者来说,Lazygit 是效率提升最大的工具之一。
核心概念¶
| 概念 | 白话解释 | 用途 |
|---|---|---|
| Status Panel | 状态面板 | 显示工作区变更状态 |
| Files Panel | 文件面板 | 暂存/取消暂存文件 |
| Branches Panel | 分支面板 | 管理本地和远程分支 |
| Commits Panel | 提交面板 | 查看和操作提交历史 |
| Stash Panel | 暂存面板 | 管理 Git stash |
| Staging View | 暂存视图 | 按行/块暂存代码 |
安装配置¶
安装¶
# macOS
brew install lazygit
# Ubuntu (PPA)
sudo add-apt-repository ppa:lazygit-team/release
sudo apt update && sudo apt install lazygit
# Go install
go install github.com/jesseduffield/lazygit@latest
# Arch Linux
pacman -S lazygit
配置文件¶
# ~/.config/lazygit/config.yml
gui:
theme:
activeBorderColor:
- green
- bold
inactiveBorderColor:
- white
selectedLineBgColor:
- blue
showFileTree: true
showRandomTip: false
nerdFontsVersion: "3"
git:
paging:
colorArg: always
pager: delta --dark --paging=never
merging:
manualCommit: false
autoFetch: true
autoRefresh: true
keybinding:
universal:
quit: q
return: <esc>
os:
editPreset: "nvim"
快速上手¶
启动¶
面板导航¶
常用操作¶
文件面板:
Space 暂存/取消暂存文件
a 暂存/取消暂存所有文件
c 提交
Enter 查看文件差异
d 丢弃更改
e 编辑文件
i 添加到 .gitignore
分支面板:
Space 切换分支
n 新建分支
d 删除分支
r 变基当前分支
M 合并到当前分支
f fetch 远程
p push
P pull
提交面板:
Enter 查看提交详情
r 变基(reword/edit/squash 等)
g reset 到此提交
c cherry-pick
A 修改上一个提交(amend)
Stash:
Space 应用 stash
g 弹出 stash
d 删除 stash
n 新建 stash
进阶用法¶
交互式变基¶
1. 在提交面板按 r 进入变基模式
2. 对每个提交选择操作:
- p (pick): 保留
- r (reword): 修改提交信息
- e (edit): 编辑提交
- s (squash): 合并到上一个
- f (fixup): 合并(丢弃信息)
- d (drop): 丢弃
3. 按 m 开始变基
按行暂存¶
合并冲突解决¶
冲突发生时:
1. 在文件面板看到冲突文件
2. Enter 进入冲突视图
3. 上下导航到冲突块
4. 按键选择:
- ← 选择左侧(当前分支)
- → 选择右侧(传入分支)
- b 同时保留两侧
5. 解决后 Space 暂存
自定义命令¶
# ~/.config/lazygit/config.yml
customCommands:
- key: "C"
context: "files"
description: "Conventional Commit"
prompts:
- type: "menu"
title: "类型"
options:
- name: "feat"
value: "feat"
- name: "fix"
value: "fix"
- name: "docs"
value: "docs"
- name: "refactor"
value: "refactor"
- type: "input"
title: "scope(可选)"
initialValue: ""
- type: "input"
title: "描述"
command: |
git commit -m "{{index .PromptResponses 0}}{{if index .PromptResponses 1}}({{index .PromptResponses 1}}){{end}}: {{index .PromptResponses 2}}"
loadingText: "Committing..."
- key: "<c-p>"
context: "global"
description: "Push with force-with-lease"
command: "git push --force-with-lease"
loadingText: "Force pushing..."
与 Delta 集成美化差异¶
# 安装 delta
cargo install git-delta
# lazygit 配置中使用 delta
git:
paging:
colorArg: always
pager: delta --dark --paging=never --line-numbers
与 Neovim 集成¶
-- 在 Neovim 中使用 lazygit
-- 使用 toggleterm 或 floaterm 插件
{
"kdheepak/lazygit.nvim",
keys = {
{ "<leader>gg", "<cmd>LazyGit<cr>", desc = "LazyGit" },
},
}
常见问题¶
Q: 如何撤销刚才的操作?¶
按 z 键(undo),Lazygit 支持多步撤销。
Q: 大仓库打开很慢?¶
Q: 如何配合 GPG 签名?¶
Lazygit 会自动使用 Git 配置的 GPG 设置。确保 git config --global commit.gpgsign true 已设置。
Q: 与 tig、gitui 相比?¶
- Lazygit:功能最全面,交互最友好,操作最流畅
- gitui:Rust 编写,启动快,但功能略少
- tig:只读浏览为主,编辑操作有限
参考资源¶
- GitHub:https://github.com/jesseduffield/lazygit
- 键位映射:https://github.com/jesseduffield/lazygit/blob/master/docs/keybindings
- 自定义命令:https://github.com/jesseduffield/lazygit/blob/master/docs/Custom_Command_Keybindings.md
- 配置参考:https://github.com/jesseduffield/lazygit/blob/master/docs/Config.md
- 视频教程:https://www.youtube.com/watch?v=CPLdltN7wgE