赞助商
本项目的维护得益于所有贡献者和赞助商的支持。如果您想赞助本项目并在下方显示您的头像或公司标志,请点击这里。💙
## 电梯演讲牢骚时间:你以前听说过,git 很强大,但当一切都难以操作时,这种力量有什么用?交互式变基需要你在编辑器中编辑一个该死的 TODO 文件?开玩笑吗?要暂存文件的一部分,你需要使用命令行程序逐步检查每个代码块,如果一个代码块无法进一步拆分但包含你不想暂存的代码,你必须手动编辑一个晦涩难懂的补丁文件?你在逗我吗?有时在切换分支时系统会要求你暂存更改,但切换并取消暂存后才发现根本没有冲突,直接检出分支就可以了?你一定是在开玩笑!
如果你像我一样只是个凡人,厌倦了听说 git 有多强大,而在日常生活中它只是让你痛苦不堪,那么 lazygit 可能适合你。
目录
Lazygit 不是我的全职工作,但它确实是一份相当繁重的兼职工作,所以如果你想支持这个项目,请考虑赞助我
功能
暂存单独的行
在选中的行上按空格键可以暂存它,或者按 v
开始选择一系列行。你也可以按 a
选择当前代码块的全部内容。
交互式变基
按 i
开始交互式变基。然后可以压缩(s
)、修复(f
)、删除(d
)、编辑(e
)、向上移动(ctrl+i
)或向下移动(ctrl+j
)任何待办提交,然后通过按 m
调出变基选项菜单并选择"继续"来完成变基。
你也可以在不显式启动变基的情况下执行这些操作(例如,在提交上按 s
来压缩它)。
这个演示还使用 shift+下箭头选择要移动和修复的一系列提交。
Cherry-pick
在提交上按 shift+c
复制它,然后按 shift+v
粘贴(cherry-pick)它。
二分查找
在提交视图中按 b
将提交标记为好/坏,以开始 git 二分查找。
清空工作树
当你真的想清除运行 git status
时显示的所有内容(是的,包括脏子模块)时,按 shift+d
调出重置选项菜单,然后选择"清空"选项。
修改旧提交
在任何提交上按 shift+a
将使用当前暂存的更改来修改该提交(在后台运行交互式变基)。
过滤
你可以使用 /
过滤视图。这里我们过滤分支视图,然后按 enter
查看其提交。
调用自定义命令
Lazygit 有一个非常灵活的自定义命令系统。在这个例子中,定义了一个模拟内置分支检出操作的自定义命令。
工作树
你可以创建工作树,同时处理多个分支,而无需在它们之间切换时进行暂存或创建临时提交。在分支视图中按 w
可以从选定的分支创建工作树并切换到它。
变基魔法(自定义补丁)
你可以从旧提交构建自定义补丁,然后从提交中移除该补丁,拆分出新的提交,将补丁反向应用到索引等。
在这个例子中,我们有一个想要从旧提交中删除的多余注释。我们在提交上按 <enter>
查看其文件,然后在文件上按 <enter>
聚焦补丁,接着按 <space>
将注释行添加到我们的自定义补丁中,最后按 ctrl+p
查看自定义补丁选项;选择从当前提交中移除补丁。
在 变基魔法 YouTube 教程中了解更多信息。
从标记的基础提交变基
假设你在一个从 develop 分支分出的特性分支上工作,现在你决定想从 master 分支分出。你需要一种方法只变基你特性分支的提交。在这个演示中,我们先检查 develop 分支上的最后一个提交,然后按 shift+b
将该提交标记为我们的基础提交,接着在 master 分支上按 r
进行变基,只带上特性分支的提交。然后我们用 shift+p
推送更改。
撤销
你可以按 'z' 撤销最后一个操作,按 ctrl+z
重做。这里我们删除了几个提交,然后撤销了这些操作。
撤销使用引用日志,引用日志是特定于提交和分支的,所以我们无法撤销对工作树或暂存区的更改。
提交图
当在放大的窗口中查看提交图时(使用+
和_
循环切换窗口大小),会显示提交图。颜色对应提交作者,当你在图中导航时,所选提交的父提交会被高亮显示。
比较两个提交
如果你在一个提交(或分支/引用)上按shift+w
,会打开一个菜单,允许你标记该提交,这样你选择的任何其他提交都会与之进行对比。选择第二个提交后,你会在主视图中看到差异,如果按<enter>
,你将看到差异的文件。你可以按shift+w
再次查看差异菜单,查看诸如反转差异方向或退出差异模式等选项。你也可以按<escape>
退出差异模式。
教程
安装
上述大多数软件包由第三方维护,因此请务必自行验证,并确认维护者是看起来值得信赖的人,他们参加当地体育比赛并通过烧烤筹款等方式回馈社区
二进制发布
对于Windows、Mac OS(10.12+)或Linux,你可以在这里下载二进制发布版。
Homebrew
通常lazygit公式可以在Homebrew核心仓库中找到,但我们建议你使用我们的公式以获得频繁更新的版本。它也适用于Linux。
使用tap:
brew install jesseduffield/lazygit/lazygit
使用核心仓库:
brew install lazygit
MacPorts
从github发布构建的最新版本。 使用tap:
sudo port install lazygit
Void Linux
Void Linux的软件包可在发行版仓库中获得
它们跟随上游最新发布
sudo xbps-install -S lazygit
Scoop (Windows)
你可以使用scoop安装lazygit
。它在extras
桶中:
# 添加extras桶
scoop bucket add extras
# 安装lazygit
scoop install lazygit
Arch Linux
Arch Linux的软件包可通过pacman和AUR(Arch用户仓库)获得。
有两个软件包。稳定版基于最新发布构建,git版本基于最近的提交构建。
- 稳定版:
sudo pacman -S lazygit
- 开发版:https://aur.archlinux.org/packages/lazygit-git/
如何安装AUR内容的说明可以在这里找到: https://wiki.archlinux.org/index.php/Arch_User_Repository
Fedora和RHEL
Fedora/RHEL和CentOS Stream的软件包可通过Copr(Cool Other Package Repo)获得。
sudo dnf copr enable atim/lazygit -y
sudo dnf install lazygit
Solus Linux
sudo eopkg install lazygit
Ubuntu
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/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit
sudo install lazygit /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
在NixOs上,lazygit通过nix打包并通过nixpkgs分发。 你可以在不安装的情况下尝试lazygit:
nix-shell -p lazygit
# 或者启用flakes
nix run nixpkgs#lazygit
或者你可以在configuration.nix的environment.systemPackages部分添加lazygit。 更多详情可以在NixOs搜索页面找到。
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
(Windows)。不要与C:\Go\bin
混淆(后者是Go自己的二进制文件,而不是像lazygit这样的应用程序)。
Chocolatey (Windows)
你可以使用Chocolatey安装lazygit
:
choco install lazygit
Winget (Windows 10 1709或更高版本)
你可以在Windows终端中使用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 支持
如果你已安装 Gitflow,Lazygit 支持它。要了解 Gitflow 模型的工作原理,请查看 Vincent Driessen 的原始文章。要在 Lazygit 中查看 Gitflow 选项,请在分支视图中按 i
。
贡献
我们非常欢迎你的贡献!请查看贡献指南。 对于不适合在此仓库讨论的贡献者讨论,请加入 Discord 频道
如果你想了解从哪里开始,可以查看这个视频,它演示了在 lazygit 中创建一个小功能的过程。
本地调试
在一个终端标签页中运行 lazygit --debug
,在另一个标签页中运行 lazygit --logs
,以并排查看程序及其日志输出。
捐赠
如果你想支持 lazygit 的开发,可以考虑赞助我(GitHub 将在 12 个月内对所有捐款进行一比一匹配)
常见问题
提交颜色代表什么?
- 绿色:该提交包含在主分支中
- 黄色:该提交不包含在主分支中
- 红色:该提交尚未推送到上游分支
自荐
如果你想了解我(Jesse)在开发方面的近况,可以在 Twitter 上关注我或查看我的博客
替代方案
如果你发现 lazygit 不能完全满足你的需求,以下可能是更好的选择: