跳转至

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"

快速上手

启动

# 在 Git 仓库中启动
lazygit

# 或指定路径
lazygit -p /path/to/repo

面板导航

Tab/Shift+Tab    切换面板
h/l              面板内左右切换
j/k              上下移动
Enter            确认/展开
q                退出
?                帮助

常用操作

文件面板:
  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. 在文件面板选中文件按 Enter 进入差异视图
2. 使用 j/k 移动到特定行
3. Space 暂存/取消暂存单行
4. v 进入可视模式选择多行
5. Space 暂存选中的行块

合并冲突解决

冲突发生时:
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: 大仓库打开很慢?

# 配置中调整
git:
  autoFetch: false       # 关闭自动 fetch
  autoRefresh: false     # 关闭自动刷新

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