mcpField
L
Lazygit

Lazygit

官方精选
github.com开发者工具83.5klazygit2 周前更新
代码仓库访问官网

关于 Lazygit

Lazygit 提供一个快速、直观的终端 UI,通过键盘快捷键处理分支、提交、变基等 Git 操作。开发者可以在不离开终端的情况下,以更高效的方式浏览和修改 Git 历史。

主要功能

  1. 01轻松创建、切换和删除分支
  2. 02交互式暂存和提交文件更改
  3. 03直观的变基、合并和冲突解决界面
  4. 04快速浏览提交历史和文件变更

适用场景

  1. 01在复杂的分支管理和变基工作中提高效率
  2. 02进行交互式提交和部分暂存,精细控制版本历史
  3. 03快速解决合并冲突和审查代码变更

安装

选择你的系统或包管理器,复制命令到终端运行。

$
brew install lazygit

安装完成后运行lazygit --version确认安装成功。

命令示例

常用命令按使用顺序排列。

01
lazygit

详细介绍

README 配图

一个用于执行 git 命令的简易终端 UI

GitHub Releases golangci-lint GitHub tag homebrew

赞助者

本项目的维护离不开所有贡献者和赞助者的支持。如果你愿意赞助本项目,并让你的头像或公司徽标显示在下方,请点击此处。💙

User avatar: Mark LussierUser avatar: Dean HerbertUser avatar: Peter BjorklundUser avatar: Oliver GüntherUser avatar: Pawan DhananjayUser avatar:User avatar: Carsten GehlingUser avatar: AliUser avatar: Chau TranUser avatar: matejcikUser avatar: theAverageDev (Luca Tumedei)User avatar: Erik ScraffordUser avatar:User avatar: Alex StelmachonakUser avatar: Pedro PombeiroUser avatar: Burgy BenjaminUser avatar: Joe KlemmerUser avatar: Tobias LütkeUser avatar: Ben BeaumontUser avatar:User avatar: HollyUser avatar: Tom LanserUser avatar: Casey BoettcherUser avatar: Jeff ForcierUser avatar: Maciej T. NowakUser avatar: James HillyerdUser avatar: YuryUser avatar: Olivier reivilibreUser avatar: Braden SteffaniakUser avatar: SebastianUser avatar: Andy SlezakUser avatar: Martin KockUser avatar: Daniel KokottUser avatar: Jan HeijmansUser avatar: Kevin NowaldUser avatar: Ethan LiUser avatar: Robert ForlerUser avatar: Jan ZenknerUser avatar:User avatar: Frederick MorlockUser avatar: Maximilian LangenfeldUser avatar: AlejandroUser avatar:User avatar: Neil LambertUser avatar: David Heinemeier HanssonUser avatar: Ethan FischerUser avatar: Terry TaiUser avatar: Adam RoesnerUser avatar: Tim MorganUser avatar: Maksym ShypulniakUser avatar: Kovács ÁdámUser avatar: Patricio SerranoUser avatar: KiriUser avatar: Steven MasiniUser avatar: John Even BjørnevikUser avatar: Michael OberstUser avatar: Adam TrepanierUser avatar: Kenth FagerlundUser avatar: Julien TardotUser avatar: Ellord TayagUser avatar: Edgar Post-BuijsUser avatar: Pierre SpringUser avatar: Zac ClayUser avatar: Thomas MüllerUser avatar: Carl AssmannUser avatar: Moody LiuUser avatar: Lasse Bloch LauritsenUser avatar: Alexander SlavschikUser avatar: Aidan GaulandUser avatar: Maksym BieńkowskiUser avatar: Joshua WootonnUser avatar:User avatar: Simon Sandvik LeeUser avatar: Thomas GilbertUser avatar: Szymon MuchaUser avatar: Unnawut LeepaisalsuwannaUser avatar: Bret WortmanUser avatar: Simon CardonaUser avatar: André LameirinhasUser avatar: Scott VelezUser avatar: justinUser avatar: MayfieldUser avatar: Soma HolidayUser avatar: Drew CouncilUser avatar: DessalinesUser avatar: Asuka MinatoUser avatar: Felipe OspinaUser avatar: Riccardo NovagliaUser avatar: Robert BuchbergerUser avatar: housekeeperUser avatar: Grigorii K. ShartsevUser avatar:User avatar: Francis MeetzeUser avatar: Carlos EUser avatar: Darren SpurgeonUser avatar: Nestor CustodioUser avatar: Dani BenglUser avatar: ZachUser avatar:User avatar: Ivan Fedotov

简介

吐槽时间:你肯定听过,git 功能强大,但当一切操作都该死地难用时,这种强大又有什么意义?交互式变基居然需要你在编辑器里编辑一个该死的 TODO 文件?开什么玩笑? 要暂存文件的一部分,你得用命令行程序逐个处理每个代码块;如果某个代码块已经无法再拆分,却包含你不想暂存的代码,你就得_手动_编辑一份晦涩难懂的补丁文件?你开什么玩笑?! 有时你切换分支时会被要求先贮藏更改,结果切换并恢复贮藏后才发现根本没有任何冲突,直接检出分支就行了?你这一定是在开玩笑吧!

如果你和我一样只是个普通人,已经厌倦了别人总说 git 有多强大,而它在日常使用中却让你头疼不已,那么 lazygit 也许适合你。

目录

Lazygit 不是我的全职工作,但它占用了我相当多的业余时间。如果你想支持这个项目,请考虑赞助我

功能

暂存代码块或单独的行

在已更改的文件上按 0,即可在主视图中聚焦该文件的差异。起初选中的是整个代码块,因此按 <space> 会暂存该代码块并跳到下一个代码块。如果只想选择代码块的一部分,按 a 可逐行选择,按 v 可选择一段行。你暂存的内容会显示在下方窗格中。按 <tab> 可在两个窗格之间切换;在下方窗格中按 <space> 可取消暂存。按 c 可直接提交,无需退出差异视图。

交互式变基

按 i 开始交互式变基。然后,对任意待处理提交进行压缩(s)、合并(f)、丢弃(d)、编辑(e)、上移(ctrl+k)或下移(ctrl+j),再按 m 打开变基选项菜单,并选择 continue 以继续变基。

你也可以不显式开始变基,直接对提交执行上述任一操作一次(例如,按提交上的 s 将其压缩)。

此演示还使用 shift+down 选择一组提交,以便移动并合并。

Cherry-pick

在提交上按 shift+c 复制该提交,然后按 shift+v 粘贴(cherry-pick)。

二分查找

在提交视图中按 b,将提交标记为正常或异常,以开始 git bisect。

清空工作树

如果你真的想彻底清除运行 git status 时显示的所有内容(没错,也包括有未提交更改的子模块),按 kidpix 风格 按 shift+d 打开重置选项菜单,然后选择“彻底清空”选项。

修改旧提交

在任意提交上按 shift+a,即可用当前暂存的更改修改该提交(后台会运行交互式变基)。

筛选

按 / 可以筛选视图。这里我们筛选分支视图,然后按 enter 查看该分支的提交。

调用自定义命令

Lazygit 提供了非常灵活的自定义命令系统。在此示例中,我们定义了一个自定义命令,用于模拟内置的分支检出操作。

工作树

你可以创建多个工作树,同时处理多个分支,无需在切换分支时暂存更改或创建 WIP 提交。在分支视图中按 w,即可根据选中的分支创建工作树并切换到该工作树。

变基魔法(自定义补丁)

你可以根据旧提交构建自定义补丁,然后从该提交中移除补丁、拆分出一个新提交、将补丁反向应用到索引等。

在此示例中,旧提交包含一项本应单独提交的更改。我们在该提交上按 0 聚焦其差异。在要移动的代码块上按 <space>,将其添加到自定义补丁;按 ctrl+p 打开自定义补丁选项,然后选择将补丁移入新提交。

请参阅 变基魔法 YouTube 教程了解更多信息。

如果你只想从旧提交中移除一个代码块,则无需使用自定义补丁。在提交的差异中选中该代码块,然后按 d。Lazygit 会在后台运行交互式变基,重写该提交并移除这个代码块。

从标记的基准提交变基

假设你当前位于一个功能分支上,而这个分支最初是从 develop 分支分出来的;现在你决定改为从 master 分支分支。你需要一种只对功能分支上的提交进行变基的方法。在此演示中,我们先查看 develop 分支上的最后一个提交,然后按 shift+b 将该提交标记为基准提交,再在 master 分支上按 r 以它为目标进行变基,只带上功能分支上的提交。然后按 shift+p 推送更改。

撤销

按 z 可撤销上一个操作,按 shift+z 可重做。这里我们丢弃了几个提交,然后撤销这些操作。 撤销功能使用 reflog,它仅针对提交和分支,因此无法撤销对工作树或 stash 的更改。

更多信息

提交图

在放大窗口中查看提交图时(使用 + 和 _ 切换屏幕模式),会显示提交图。颜色对应提交作者;当你沿图向下浏览时,所选提交的父提交会高亮显示。

比较两个提交

在某个提交(或分支/ref)上按 shift+w 会打开一个菜单,你可以在其中标记该提交,以便将之后选中的其他提交与它进行差异比较。选中第二个提交后,你会在主视图中看到差异;按 <enter> 则会看到差异涉及的文件。再次按 shift+w 可打开差异菜单,查看反转差异方向或退出差异模式等选项。你也可以按 <escape> 退出差异模式。

显示 GitHub 拉取请求

在分支面板中,lazygit 可以在分支名称旁显示 GitHub 图标,以标明哪些分支关联了 GitHub 拉取请求;图标颜色表示 PR 的状态(开放、已合并等)。对于有 PR 的分支,你可以按 shift-G 在浏览器中打开 PR。启用此功能无需配置,但需要安装 gh 工具,并且需要运行一次 gh auth login,以允许 lazygit 访问 GitHub。对于 GitHub Enterprise,还需运行 gh auth login --hostname <webDomain>,并为该主机添加一个 services 条目,使用 github 提供程序。

教程

README 配图

安装

Packaging status

上面的大多数软件包都由第三方维护,因此请务必自行审核,并确认维护者看起来值得信赖,会参加当地体育赛事,还会通过烧烤筹款活动等方式回馈社区。

二进制发行版

对于 Windows、Mac OS(10.12+) 或 Linux,你可以在此下载二进制发行版。

Dev container 功能

如果你想在例如某个 GitHub Codespaces 中使用 lazygit,可以使用基于上述二进制发行版的第三方 dev container 功能。

Homebrew

它也适用于 Linux。

brew install lazygit
MacPorts

基于 GitHub 发行版构建的最新版本。 添加源:

sudo port install lazygit
Void Linux

Void Linux 的软件包可在发行版仓库中获取。

这些软件包跟随上游最新版本。

sudo xbps-install -S lazygit
Scoop(Windows)

你可以使用 scoop 安装 lazygit。它位于 extras bucket 中:

# Add the extras bucket
scoop bucket add extras

# Install lazygit
scoop install lazygit
gah(Linux 和 Mac OS)

你可以使用 gah 安装 lazygit:

gah install lazygit
Arch Linux

Arch Linux 的软件包可通过 pacman 和 AUR(Arch User Repository)获取。

有两个软件包:稳定版使用最新发行版本构建,git 版本则使用最近的提交构建。

此处提供了安装 AUR 内容的说明: https://wiki.archlinux.org/index.php/Arch_User_Repository

Fedora / Amazon Linux 2023 / CentOS Stream

Fedora、Amazon Linux 2023 和 CentOS Stream 的软件包可通过 Copr(Cool Other Package Repo)获取。

sudo dnf copr enable dejan/lazygit
sudo dnf install lazygit

这些软件包使用此处提供的 RPM spec 文件构建:https://codeberg.org/dejan/rpm-lazygit

你应该可以使用最新 COPR 构建中的 SRPM(Source RPM)文件,为 Fedora 41 或更早版本以及其他 Fedora 衍生版构建 RPM。

Fedora / RHEL 衍生版(Terra)

Fedora 和 RHEL 衍生版也可从 Terra Repository 获取软件包。

sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release
sudo dnf install lazygit

(Atomic/EL 的安装指南可在其 README 中找到。)

Terra 还提供 lazygit-doc,其中包含 docs 文件夹的内容。

Solus Linux
sudo eopkg install lazygit
Debian 和 Ubuntu

适用于 Debian 13 "Trixie"、Sid 及更高版本,或 Ubuntu 25.10 "Questing Quokka" 及更高版本:

sudo apt install lazygit

适用于 Debian 12 "Bookworm"、Ubuntu 25.04 "Plucky Puffin" 及更早版本:

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

验证 lazygit 是否安装正确:

lazygit --version
Funtoo Linux

Funtoo Linux 在 dev-kit 中提供自动生成的 lazygit 软件包:

sudo emerge dev-vcs/lazygit
Gentoo Linux

Lazygit 尚未进入 Gentoo 主 portage,但 GURU overlay 中提供了 ebuild。

你可以将该 overlay 添加到系统,然后按常规方式安装 lazygit:

sudo eselect repository enable guru
sudo emaint sync -r guru
sudo emerge dev-vcs/lazygit
openSUSE

lazygit 软件包目前在 devel:languages:go/lazygit 中构建。

在 openSUSE Tumbleweed 上安装 lazygit,请运行:

sudo zypper ar https://download.opensuse.org/repositories/devel:/languages:/go/openSUSE_Factory/devel:languages:go.repo
sudo zypper ref && sudo zypper in lazygit

在 openSUSE Leap 上安装 lazygit,请运行:

source /etc/os-release
sudo zypper ar https://download.opensuse.org/repositories/devel:/languages:/go/$VERSION_ID/devel:languages:go.repo
sudo zypper ref && sudo zypper in lazygit
NixOS
使用 nixpkgs 中的 lazygit

在 NixOS 上,lazygit 通过 nix 打包并经由 nixpkgs 分发。 你可以先试用 lazygit,而无需安装:

nix-shell -p lazygit
# or with flakes enabled
nix run nixpkgs#lazygit

或者,你可以使用 environment.systemPackages 选项将 lazygit 添加到 configuration.nix 中。 更多详情请参阅 NixOS 搜索页面。

使用官方 lazygit flake

此仓库包含一个 nix flake,可提供最新开发版本和其他开发工具:

直接从仓库运行 lazygit:

nix run github:jesseduffield/lazygit
# or from a local clone
nix run .

从源代码构建 lazygit:

nix build github:jesseduffield/lazygit
# or from a local clone
nix build .

开发环境: 对于贡献者,该 flake 提供一个开发 shell,其中包含 Go 工具链、开发工具和依赖项:

nix develop github:jesseduffield/lazygit
# or from a local clone
nix develop

开发 shell 包含:

  • Go 工具链
  • git 和 make
  • 适用于开发的环境变量

在其他 flake 中使用: 该 flake 还提供一个 overlay,便于集成到其他基于 flake 的项目中:

{
  inputs.lazygit.url = "github:jesseduffield/lazygit";

  outputs = { self, nixpkgs, lazygit }: {
    # Use the overlay
    nixpkgs.overlays = [ lazygit.overlays.default ];
  };
}
Flox

可以按如下方式将 Lazygit 安装到 Flox 环境中。

flox install lazygit

关于 Flox 的更多详情,请访问其网站。

FreeBSD
pkg install lazygit
Termux
apt install lazygit
Conda

不同平台均提供已发布版本,请参阅 https://anaconda.org/conda-forge/lazygit

conda install -c conda-forge lazygit
Go
go install github.com/jesseduffield/lazygit@latest

请注意: 如果你遇到错误,提示找不到 lazygit 或未定义 lazygit,可能需要将 ~/go/bin 添加到 $PATH(macOS/Linux),或将 %HOME%\go\bin 添加到 PATH(Windows)。不要与 C:\Go\bin 混淆,后者存放的是 Go 自身的二进制文件,而不是 lazygit 这类应用。

Chocolatey(Windows)

你可以使用 Chocolatey 安装 lazygit:

choco install lazygit
Winget(Windows 10 1709 或更高版本)

你可以在 Windows Terminal 中使用 winget 命令安装 lazygit:

winget install -e --id=JesseDuffield.lazygit
手动安装

你需要先安装 Go

git clone https://github.com/jesseduffield/lazygit.git
cd lazygit
go install

你也可以使用 go run main.go 一步完成编译和运行(双关语绝对是故意的)

使用方法

在 Git 仓库中的终端里调用 lazygit。

$ lazygit

如果你愿意,也可以使用 echo "alias lg='lazygit'" >> ~/.zshrc 添加别名(或添加到你正在使用的其他 rc 文件中)。

键绑定

你可以在此处查看键绑定列表。

退出时切换目录

如果你在 lazygit 中切换了仓库,并希望退出 lazygit 时让 shell 切换到该仓库的目录,请将以下内容添加到 ~/.zshrc(或其他 rc 文件)中:

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
}

然后运行 source ~/.zshrc。之后,每当你调用 lg 并退出时,都会切换到你在 lazygit 中所在的目录。若要覆盖此行为,可以按 shift+Q 退出,而不是只按 q。

撤销/重做

请参阅文档

配置

请查看配置文档。

自定义差异渲染器

请参阅文档

自定义命令

如果 lazygit 缺少某项功能,你很可能可以通过自定义命令自行实现!

请参阅文档

Git flow 支持

如果已安装,Lazygit 支持 Gitflow(或 git-flow-next)。若要了解 Gitflow 模型的工作方式,请查看 Vincent Driessen 介绍该模型的原文。要在 Lazygit 中查看 Gitflow 选项,请在分支视图中按 i。

贡献

我们期待你的参与!请查看贡献指南。 若要讨论不适合在仓库中进行的贡献相关话题,请加入 discord 频道

README 配图

如果你想了解如何入手,可以观看这个视频,了解如何在 lazygit 中开发一个小功能。

本地调试

在一个终端标签页中运行 lazygit --debug,在另一个标签页中运行 lazygit --logs,即可并排查看程序及其日志输出

捐赠

如果你愿意支持 lazygit 的开发,可以考虑赞助我(github 将在 12 个月内按一比一的比例匹配所有捐款)

常见问题

提交颜色代表什么?
  • 绿色:该提交包含在 master 分支中
  • 黄色:该提交未包含在 master 分支中
  • 红色:该提交尚未推送到上游分支

不好意思打个广告

如果你想了解我(Jesse)最近在做哪些开发工作,可以关注我的 twitter,或查看我的博客

替代方案

如果你发现 lazygit 不太符合你的需求,以下工具可能更适合:

评论

支持 Markdown