Lazygit | Git 终端可视化工具的安装与操作

注:本文为 "Lazygit 使用" 相关合辑。

图片清晰度受引文原图所限。

略作重排,如有内容异常,请看原文。


安装并使用 Lazygit -- 用于 Git 命令的简单终端用户界面

在本教程中,我们将介绍如何在 Linux、macOS、Windows 等系统上安装和使用 Lazygit。Lazygit 是一个用于 Git 命令的轻量终端用户界面,由 Go 语言结合 gocui 库 开发实现,可在 Linux、macOS、FreeBSD 和 Windows 系统上运行。该工具能让以终端为的操作环境拥有类 Sourcetree 的可视化体验,操作快速且易用,仅需在 Git 仓库目录中执行单条命令即可启动,无需重复输入原生 Git 指令,可显著提升 Git 操作效率。

Lazygit 的功能特点

  • 快速完成文件的暂存与取消暂存操作,支持按代码片段精准暂存
  • 直观解决 Git 合并冲突,支持选择保留单/双方案的冲突片段
  • 便捷查看仓库的本地与远程分支,快速完成分支的切换与管理
  • 滚动浏览分支、提交记录、暂存内容对应的日志与文件详情
  • 一键执行代码的拉取、推送操作,简化远程仓库交互流程
  • 支持提交记录的压缩、重命名、修正,轻松管理提交历史
  • 提供提交记录的全局搜索功能,可快速定位目标提交
  • 支持樱桃拣选操作,可将指定提交复制到其他分支
  • 一键打开分支的 Pull Request 页面,简化协作提交流程

Lazygit 的面板组成

Lazygit 的终端界面包含多个功能面板,各面板各司其职,覆盖 Git 操作的全流程,面板间可通过快捷键快速切换,各面板功能如下:

  • 全局面板:展示仓库整体状态,支持全局操作与导航
  • 文件面板:展示仓库中已修改、未跟踪、已暂存的文件列表
  • 分支面板:展示仓库的本地与远程分支,支持分支的各类管理操作
  • 提交面板:展示当前分支的提交记录,支持提交历史的编辑与操作
  • 暂存面板:展示仓库的暂存记录,支持暂存内容的应用、删除与查看
  • 合并冲突解决面板:专门用于处理合并冲突,支持冲突片段的选择与编辑

Lazygit 安装

Lazygit 支持多系统安装,不同系统可通过包管理器、PPA 源、AUR 源或二进制包完成安装,以下为各系统的详细安装步骤,安装完成后可通过版本验证命令确认安装成功。

macOS

macOS 系统可通过 Homebrew 包管理器快速安装,执行以下命令即可完成安装:

bash 复制代码
brew tap jesseduffield/lazygit
brew install lazygit

Ubuntu

Ubuntu 系统的 Lazygit 软件包可通过 Launchpad PPA 获取,先将 PPA 源添加至系统,再执行安装命令:

bash 复制代码
sudo add-apt-repository ppa:lazygit-team/daily
sudo apt update
sudo apt install lazygit

也可通过二进制包进行安装,适用于 Ubuntu 及 Debian 系列系统,执行以下命令:

bash 复制代码
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_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit
sudo install lazygit -D -t /usr/local/bin/

Arch Linux

Arch Linux 系统可通过 AUR 源安装 Lazygit,提供稳定版与开发版两个包:lazygit 为基于最新版本构建的稳定版,lazygit-git 为基于最新提交构建的开发版。

安装前需先安装 AUR 助手(如 yay,可参考 yay 安装教程),再执行对应安装命令:

  • 安装稳定版:

    bash 复制代码
    yay -S --noconfirm --needed lazygit
  • 安装开发版:

    bash 复制代码
    yay -S --noconfirm --needed lazygit-git

Windows

Windows 系统可通过 Scoop 包管理器安装,先添加 extras 仓库,再执行安装命令:

bash 复制代码
# 添加 the extras bucket
scoop bucket add extras
# 安装 lazygit
scoop install lazygit

Fedora 和 RHEL

Fedora 与 RHEL 系统可通过 DNF 包管理器结合 copr 源安装,执行以下命令:

bash 复制代码
sudo dnf copr enable atim/lazygit -y
sudo dnf install lazygit

NixOS

NixOS 系统支持多种安装方式,可根据需求选择临时使用、全局安装或系统配置中添加,也可通过 flakes 运行:

bash 复制代码
# 临时使用(nix-shell)
nix-shell -p lazygit

# 全局安装(nix-env)
nix-env -iA lazygit

# 系统配置中添加(/etc/nixos/configuration.nix)
environment.systemPackages = [
  pkgs.lazygit
];

# 通过 flakes 运行
nix run nixpkgs#lazygit

从二进制包安装 Lazygit

二进制包安装为通用安装方式,适用于所有 Linux 系统,可从 Lazygit 发布页 获取对应版本的二进制包,以下为 Linux x86_64 架构的安装示例(以 0.40.2 版本为例):

bash 复制代码
export VER="0.40.2"
wget -O lazygit.tgz https://github.com/jesseduffield/lazygit/releases/download/v${VER}/lazygit_${VER}_Linux_x86_64.tar.gz
tar xvf lazygit.tgz
sudo mv lazygit /usr/local/bin/

Lazygit 安装验证

完成上述任意安装步骤后,在终端执行以下命令验证安装是否成功,若输出版本信息则说明安装完成:

bash 复制代码
lazygit --version

示例输出:

bash 复制代码
commit=, build date=, build source=nix, version=0.44.1, os=linux, arch=amd64, git version=2.47.0

Lazygit 基础使用方法

Lazygit 的使用以 Git 仓库为前提,仅需单条命令即可启动,启动后可通过快捷键完成面板导航、各类 Git 操作,操作均通过键盘快捷键实现,无需鼠标参与。

Lazygit 启动命令

在终端进入任意 Git 仓库的根目录,执行以下命令即可启动 Lazygit 终端界面:

bash 复制代码
lazygit

为简化输入,可在系统中设置别名(如 lg),执行 alias lg='lazygit' 后,后续仅需输入 lg 即可启动。

启动后的 Lazygit 界面如下,整体分为左侧功能面板区与右侧预览/指令提示区:


Lazygit 面板详细介绍

Lazygit 的界面分为左侧 5 个功能面板与右侧预览/指令提示区,左侧面板可通过快捷键切换,部分面板支持分页切换(如文件面板支持 Worktrees、Submodules 分页),各面板的详细功能与展示内容如下:

  1. 状态面板(Status) :展示当前仓库的整体状态,包括当前检出的分支、本地与远程的变更差异,点击面板文本可查看最近打开的仓库列表。

  2. 文件面板(Files) :展示仓库中已修改、已删除、未跟踪、已暂存的文件列表,支持文件的暂存、取消暂存、忽略、删除等操作。
  3. 分支面板(Branches) :展示仓库的本地与远程分支列表,支持分支的切换、创建、删除、合并、重命名等管理操作。
  4. 提交面板(Commits) :展示当前分支的所有提交记录,包括提交哈希、提交作者、提交时间、提交信息,支持提交记录的编辑、撤销、压缩等操作。
  5. 暂存面板(Stash) :展示仓库的暂存记录,包括暂存时间、暂存描述,支持暂存内容的应用、弹出、删除等操作,用于临时保存未提交的变更。
  6. 预览面板(Preview) :作为右侧面板,可预览未暂存变更、提交内容、文件详情、合并冲突等信息,随左侧操作面板的切换实时更新内容。

Lazygit 面板导航方式

Lazygit 的面板导航完全通过键盘实现,支持方向键、字母键的快速切换,导航快捷键如下,可实现面板间、面板内的快速移动:

  • ← → / h l 键:切换左侧不同的功能面板
  • ↑ ↓ / k j 键:移动当前面板内的光标,选择目标选项
  • PgUp/PgDnctrl+u/ctrl+d 键:滚动预览面板的内容(macOS 系统需按 fn+up/fn+down 实现 PgUp/PgDn)
  • [ ] 键:切换当前面板的分页(如文件面板的 Worktrees/Submodules 分页)
  • 按数字键 1/2/3/4/5:快速跳转到状态/文件/分支/提交/暂存面板
  • + 键:将当前面板展开为半屏/全屏模式,便于查看详细内容

Lazygit 各面板快捷键绑定

Lazygit 的所有操作均通过快捷键实现,不同面板拥有专属的快捷键,全局快捷键适用于所有面板,操作快捷键可通过 ? 键随时调取帮助菜单(帮助菜单随当前面板动态变化),以下为各面板的详细快捷键绑定。

全局快捷键

适用于 Lazygit 所有面板,包含导航、退出、远程交互等操作:

复制代码
← →/h l:               切换功能面板
↑ ↓/k j:               移动面板内光标
PgUp/PgDn or ctrl+u/ctrl+d:   滚动预览面板内容(macOS 用 fn+up/fn+down)
q:                                退出 Lazygit 界面
p:                                从远程仓库拉取代码
shift+P:                          向远程仓库推送代码
/:                                全局搜索(分支、提交、文件等)
n/N:                              切换搜索结果
?:                                打开当前面板的快捷键帮助菜单
y/Ctrl+o:                         复制选中的内容(文件名、分支名、提交哈希等)
esc:                              关闭弹窗/取消当前操作
enter:                            确认当前操作/查看选中内容的详情
tab:                              切换子面板(如暂存/未暂存变更面板)

文件面板快捷键

专用于文件面板,包含文件暂存、提交、忽略、编辑等操作,是日常使用频率最高的面板之一:

复制代码
space:    切换文件的暂存状态(暂存/取消暂存)
a:        暂存/取消暂存面板内所有文件
c:        提交已暂存的变更(打开简易提交信息编辑器)
shift+C:  提交已暂存的变更(打开 Git 原生编辑器)
shift+S:  将当前变更暂存至暂存面板
t:        按代码片段暂存文件(精准选择需要暂存的内容)
o:        用系统默认程序打开文件
e:        用系统默认编辑器编辑文件
s:        用 Sublime 打开文件(需系统存在 'subl' 命令)
v:        用 VSCode 打开文件(需系统存在 'code' 命令)
i:        将选中文件添加至 .gitignore 忽略列表
d:        丢弃文件变更(未跟踪文件直接删除,已跟踪文件恢复至最新提交)
D:        丢弃面板内所有文件的未提交变更
shift+R:  刷新文件面板的内容
Enter:    展开/折叠文件夹/查看文件变更详情

分支面板快捷键

专用于分支面板,包含分支的切换、创建、删除、合并等管理操作:

复制代码
space:   检出选中的分支(切换至目标分支)
f:       强制检出选中的分支(忽略本地未提交变更)
m:       将选中分支合并至当前已检出的分支
M:       打开合并选项,选择合并类型进行分支合并
c:       通过分支名搜索并检出分支
n:       基于当前分支创建新分支(输入新分支名确认)
d:       删除选中的分支(支持选择删除本地/远程分支)
r:       将当前分支变基至选中的分支
R:       重命名选中的分支
p:       从远程拉取选中分支的最新代码
P:       将选中分支的最新代码推送到远程
o:       打开选中分支的 Pull Request 页面(浏览器)
f:       抓取远程仓库的分支更新
Enter:   查看选中分支的提交记录

提交面板快捷键

专用于提交面板,包含提交记录的重命名、压缩、撤销、重置等操作:

复制代码
s:       将选中提交压缩至上一个提交(仅顶层提交可用)
r:       重命名选中提交的提交信息
shift+R: 用 Git 原生编辑器重命名选中提交的信息
g:       将当前分支重置至选中的提交(支持选择重置类型)
d:       删除选中的提交记录
shift+A: 将当前暂存的变更追加至选中的提交(修正历史提交)
e:       基于选中提交启动交互式变基
F:       为选中提交创建 fixup! 提交,用于后续压缩
S:       将选中提交之上的所有 fixup! 提交压缩至该提交
c:       复制选中的提交(用于樱桃拣选操作)
v:       将复制的提交樱桃拣选至当前分支
/:       搜索提交记录(提交信息、作者、哈希)
Enter:   查看选中提交的文件变更详情
t:       还原选中的提交记录

暂存面板快捷键

专用于暂存面板,包含暂存记录的应用、弹出、删除等操作:

复制代码
space:   应用选中的暂存记录(保留暂存记录)
g:       弹出选中的暂存记录(应用后删除暂存记录)
d:       删除选中的暂存记录(不应用,直接删除)
Enter:   查看选中暂存记录的文件变更详情

合并冲突解决面板快捷键

专用于处理合并冲突,在合并分支出现冲突时自动触发,支持冲突片段的选择与编辑:

复制代码
←→/h l:  导航至不同的冲突位置
↑↓/k j:  选中当前冲突位置的不同冲突片段
space:   选择保留选中的冲突片段
b:       保留当前冲突位置的双方冲突片段
z:       撤销当前的冲突选择(未退出冲突面板时有效)

弹出面板通用快捷键

Lazygit 中所有弹出的操作面板(如提交信息编辑、分支名输入)均适用以下快捷键:

复制代码
esc:     关闭弹出面板/取消当前输入操作
enter:   确认当前输入操作/保存编辑内容
tab:     在编辑时插入换行符

Lazygit 操作实战

Lazygit 覆盖 Git 日常操作的全流程,从文件提交、分支管理到冲突解决、历史提交编辑,均可通过快捷键快速实现,以下为日常开发中高频使用的操作实战步骤,搭配动图直观展示操作过程。

提交文件变更

  1. 在文件面板中,按 Space 键选中需要提交的文件(或按 a 键选中所有文件),文件变为绿色即表示已暂存;
  2. c 键打开提交信息编辑器,输入提交信息后按 Enter 键确认;
  3. 若需使用 Git 原生编辑器编写提交信息,按 shift+C 键即可。

拉取与推送代码

  1. 拉取代码 :在任意面板按 p 键(小写),即可从远程仓库拉取当前分支的最新代码,自动处理快进合并;
  2. 推送代码 :在任意面板按 shift+P 键(大写),即可将当前分支的最新提交推送到远程仓库;
  3. 若需拉取/推送指定分支,可在分支面板选中目标分支,按 p/P 键实现。

创建与删除分支

  1. 创建分支 :切换至分支面板,按 n 键,输入新分支名后按 Enter 键,即可基于当前分支创建新分支;
  2. 删除分支 :切换至分支面板,选中需要删除的分支,按 d 键,选择删除「本地分支」或「远程分支」后确认即可;

注意:创建/删除分支需先切换至分支面板,否则快捷键将无法触发对应操作。

撤销提交记录

  1. 切换至提交面板,确认需要撤销的提交记录(默认最新提交在面板顶部);
  2. z 键,弹出撤销提交确认面板,展示待撤销提交的详情;
  3. Enter 键确认,即可撤销该提交记录(已暂存的变更会保留,未暂存的变更不会丢失)。

合并分支并解决冲突

分支合并操作
  1. 切换至分支面板,选中需要合并至当前分支的目标分支;
  2. M 键,弹出合并选项面板,选择对应的合并类型;
  3. Enter 键确认,即可开始分支合并,无冲突则直接合并完成。

    合并类型说明
  • 普通合并(Merge):保留分支的完整提交历史,合并后生成新的合并提交;
  • 压缩合并(Squash merge):将目标分支的所有提交压缩为一个提交,合并至当前分支,简化提交历史;
  • 压缩合并且不提交(Squash merge and leave uncommitted):与压缩合并一致,但合并后不自动提交,需手动确认提交。
合并冲突解决
  1. 分支合并出现冲突时,冲突文件会在文件面板中标记,切换至文件面板选中冲突文件;
  2. Enter 键,在预览面板中查看冲突详情,按 ←→/h l 键导航不同冲突位置;
  3. ↑↓/k j 键选中冲突片段,按 Space 键选择保留该片段,按 b 键可保留双方冲突片段;
  4. 所有冲突片段选择完成后,按 c 键提交冲突解决后的变更,完成合并。

丢弃文件变更

  1. 切换至文件面板,选中需要丢弃变更的文件;
  2. d 键,弹出确认面板,按 Enter 键确认,即可丢弃该文件的所有未提交变更;
  3. 若需丢弃所有文件的未提交变更,按 D 键确认即可。

复制仓库相关信息

  1. 在任意面板选中需要复制的内容(文件名、分支名、提交哈希、提交信息等);
  2. y 键或 Ctrl+o 键,即可将选中的内容复制至系统剪贴板;
  3. 粘贴至目标位置即可使用(如提交信息、PR 描述、分支名等)。

Lazygit 高级操作实战

除日常基础操作外,Lazygit 还支持交互式变基、樱桃拣选等 Git 高级操作,简化了原生 Git 中复杂的命令行操作,仅通过快捷键即可完成,以下为高级操作的实战步骤。

交互式变基

原生 Git 的交互式变基需编辑 TODO 文件,操作复杂,Lazygit 简化了该流程,支持一键修正历史提交、压缩提交记录,操作如下:

  1. 修正历史提交 :在提交面板选中需要修正的历史提交,将需要追加的变更暂存至文件面板,按 shift+A 键,即可将暂存的变更追加至该提交,完成历史提交修正;
  2. 自定义交互式变基 :在提交面板选中目标提交,按 e 键启动交互式变基,面板中展示该提交之上的所有记录;
  3. s(压缩)、p(保留)、d(删除)等键修改各提交的变基操作,按 m 键选择「Continue」启动变基;
  4. 若变基过程中出现冲突,解决冲突后按 m 键继续变基,直至完成。

樱桃拣选(Cherry-pick)

樱桃拣选可将指定的提交记录从一个分支复制到另一个分支,Lazygit 以「复制-粘贴」的方式实现该操作,步骤如下:

  1. 切换至提交面板,选中需要复制的提交记录,按 c 键复制(复制后的提交背景变为蓝色);
  2. 切换至分支面板,选中目标分支,按 Space 键切换至该分支;
  3. 切回提交面板,按 v 键,即可将复制的提交记录樱桃拣选至当前分支,完成操作。

提交记录搜索

当分支的提交记录较多时,可通过 Lazygit 的搜索功能快速定位目标提交,步骤如下:

  1. 切换至提交面板,按 + 键将面板展开为全屏模式,便于查看更多信息;
  2. / 键,输入搜索关键词(提交信息、作者名、提交哈希),面板会实时过滤匹配的提交记录;
  3. n/N 键切换至下一个/上一个匹配结果,找到目标提交后按 Enter 键查看详情;
  4. 可对目标提交执行检出、重置、樱桃拣选等操作,按 + 键恢复面板大小。

Lazygit 开发流程

结合开源项目开发的实际场景,使用 Lazygit 可完成从分支创建、开发提交、分支合并到 PR 提交的全流程,步骤如下:

  1. 同步上游分支 :切换至分支面板,选中 upstream-master 分支,按 f 键抓取远程最新更新,保证基础分支为最新状态;
  2. 创建开发分支 :基于 upstream-master 分支,按 n 键创建新的开发分支(如 feature/xxx),按 Enter 键确认;
  3. 开发并提交 :在开发分支中完成功能开发,在文件面板按 Space 键暂存文件,按 c 键提交变更,编写清晰的提交信息;
  4. 拉取远程更新 :开发过程中,若上游分支有更新,按 p 键拉取更新,或变基至上游最新分支;
  5. 推送开发分支 :完成开发后,按 shift+P 键将开发分支推送到远程仓库;
  6. 提交 PR :切换至分支面板,选中开发分支,按 o 键一键打开 PR 页面,填写 PR 描述后提交即可;
  7. 分支清理 :PR 合并后,切换至分支面板,选中开发分支,按 d 键删除本地与远程的开发分支,完成清理。

Lazygit 使用总结与建议

  1. Lazygit 是一款轻量、高效的 Git 终端可视化工具,无需脱离终端即可实现 Git 操作的可视化,完美适配终端开发环境,显著减少原生 Git 命令的输入量,提升开发效率;
  2. Lazygit 的操作基于快捷键实现,初期需花费少量时间熟悉常用快捷键,可通过 ? 键随时调取帮助菜单,建议在测试仓库中反复练习,形成肌肉记忆;
  3. Lazygit 覆盖 Git 基础操作与高级操作的全流程,日常开发中无需再记忆复杂的 Git 命令(如交互式变基、樱桃拣选),降低 Git 操作的学习成本;
  4. 可通过设置系统别名(如 alias lg='lazygit')简化 Lazygit 的启动命令,进一步提升操作效率;
  5. Lazygit 为开源工具,可通过 GitHub 官方仓库 获取最新版本、提交 Issue 或贡献代码,官方还提供了多语言的快捷键文档,可随时查阅。

Ref:


相关推荐
x-cmd1 年前
x-cmd pkg | lazygit - Git 命令的终端图形界面
linux·git·终端·shell·日志·命令行·lazygit
x-cmd2 年前
x-cmd pkg | lazygit - git 命令的终端 UI
git·ui·gitee·github·lazygit