Git命令行可视化管理工具:lazygit

小伙伴们,大家好,我是小溪,见字如面。最近一直在使用CLI开发,已经很久没有打开过IDE了,只有在检查Diff和提交代码时才会打开IDE,那有没有可以不依赖IDE就能可视化查看Diff和管理Git的工具呢?还真有,最近发现一个可视化Git命令行管理工具lazygit在一定程度上可以解决这个的痛点。

当前使用版本

0.60.0

优势

  • 支持macOS、Linux、Windows多平台

  • 可视化git状态及管理

限制

  • macOS 10.12及以上版本

  • TUI环境限制无法展示复杂的图形化提交树或高分辨率的代码差异对比

简介

lazygit 是一款基于Go语言开发的终端交互式Git界面。它旨在通过简洁的键盘快捷键简化复杂的 Git 操作,让开发者既能享受命令行的速度,又能拥有图形化界面的直观体验。

Github地址:github.com/jesseduffie...

核心优势

lazygit CLI具有以下核心优势:

  • 交互式变基 (Interactive Rebase) 极其简单:这是其最大杀手锏。相比于 Git 原生复杂的 TODO 文件编辑,在lazygit中,你只需按下 i 即可开始,并能通过快捷键轻松完成Squash (s)、Fixup (f)、Drop (d)或 调整提交顺序 (ctrl+k/j)。

  • 精细化暂存 (Staging):支持对文件内的特定行 (Line-by-line) 或特定区块进行暂存。通过按下 v 进入行选择模式,可以非常直观地拆分大提交。

  • 可视化冲突解决:在处理合并冲突时,它提供了清晰的对比视图,允许用户通过快捷键快速选择保留哪一方的代码,极大降低了手动编辑冲突文件的出错率。

  • 高效的工作区管理 (Worktrees):内置了对 Git Worktree 的原生支持。在分支面板按 w 即可创建并跳转到新工作树,无需为了切换任务而频繁使用stash。

  • 高度可定制:用户可以通过 自定义命令 (Custom Commands) 扩展功能,甚至可以集成 GitHub CLI (gh) 来在终端内直接查看 Pull Request 状态。

安装

macOS可以使用Homebrew和MacPorts安装

shell 复制代码
# Homebrew
$ brew install lazygit

# MacPorts
$ sudo port install lazygit

Linux的支持非常全面,几乎涵盖了所有主流发行版

shell 复制代码
# apt
$ apt install lazygit

# pacman
$ sudo pacman -S lazygit

# dnf
$ dnf copr enable dejan/lazygit

Windows支持 Windows 10/11

shell 复制代码
# winget
$ winget install --id JesseDuffield.lazygit

# scoop
$ scoop install lazygit

# choco
$ choco install lazygit

安装完成后,在命令行终端输入 lazygit --version 查看安装状态,能正常打印版本消息标明安装成功

基本使用

命令行参数

在命令行终端输入 lazygit -h 查看命令行文档

lazygit提供了以下命令行参数:

  • -h|--help:显示带有可用标志、子命令和位置值参数的帮助信息

  • -p|--path: 指定要打开的Git仓库路径(等同于 --work-tree=--git-dir=/.git/)

  • -f|--filter: 在 git log -- 中过滤的路径。在过滤模式下,提交记录、引用日志(reflog)和暂存栈(stash)将根据给定路径进行过滤,且某些操作会受到限制

  • -v|--version: 打印当前版本

  • -d|--debug: 以带有日志记录的调试模式运行

  • -l|--logs: 追踪(Tail)lazygit 日志(旨在当 lazygit --debug 在另一个终端标签页中调用时使用)。

  • --profile: 启动性能分析器(profiler)并在 http 6060 端口提供服务(详见 CONTRIBUTING.md

  • -c|--config: 打印默认配置

  • -cd|--print-config-dir: 打印配置目录

  • -ucd|--use-config-dir: 使用提供的目录覆盖默认配置目录

  • -w|--work-tree: 等同于 git 的 --work-tree参数

  • -g|--git-dir: 等同于 git 的--git-dir 参数,主要用于非标准布局的项目仓库

  • -ucf|--use-config-file: 自定义配置文件的逗号分隔列表

  • -sm|--screen-mode: 初始屏幕模式,决定焦点面板的大小,有效选项:'normal' (默认)、 'half'、'full'

快捷键

lazygit CLI提供了便捷的快捷键操作:

1)全局操作(Global)

  • ?:打开帮助菜单

  • q:退出/返回

  • Q:强行退出 (不切换目录)

  • z:Undo (撤销上一步操作)

  • Z:Redo (重做上一步操作)

  • Tab/方向键:切换面板 (Files/Branches/Commits/Stash)

    • / _:循环切换窗口放大模式
  • /:Filter (搜索过滤当前面板内容)

2)文件面板 (Files Panel)

  • Space(空格键):Stage / Unstage (暂存/取消暂存单个文件)

  • a:暂存所有变更 (Stage all)

  • c:Commit (提交变更)

  • A:Amend (将当前暂存内容追加到上一次提交)

  • d:Discard (放弃单个文件的修改)

  • D:Reset (弹出重置选项菜单,如 Nuke 或 Hard Reset)

  • e:编辑文件 (使用默认编辑器)

  • i:将文件添加至 .gitignore

  • Enter:进入文件预览,可进行行级暂存

3)分支面板 (Branches Panel)

  • Space:Checkout (切换到选中分支)

  • n:创建新分支

  • d:删除分支

  • M:Merge (合并选中分支到当前分支)

  • r:Rebase (将当前分支变基到选中分支)

  • w:Worktree (基于选中分支创建工作树)

  • G:Open PR (在浏览器中打开 GitHub PR,需安装 gh)

  • i:显示 Gitflow 选项 (需安装 Gitflow)

4)提交记录面板 (Commits Panel)

  • p:Pull (拉取远程代码)

  • P:Push (推送代码到远程)

  • C:Cherry-pick (复制提交记录)

  • V:Cherry-pick Paste (粘贴/应用复制的提交)

  • i:Interactive Rebase (对选中提交启动交互式变基)

  • b:Bisect (开始二分查找调试)

  • W:Compare (标记该提交以进行差异对比)

5)变基/编辑模式 (Rebase mode)

  • s:Squash (压缩提交)

  • f:Fixup (修复提交,合并且不保留信息)

  • d:Drop (删除提交)

  • e:Edit (编辑提交)

  • Ctrl + k:将提交记录上移

  • Ctrl + j:将提交记录下移

启动lazygit

打开命令行终端cd到项目工作区,输入lazygit 即可启动命令行工具,启动后界面布局如下:

分支管理

1)创建分支

使用快捷键【Tab】或者左右箭头或者使用数字【3】切换到分支面板 (Branches Panel),然后使用快捷键【n】唤起分支菜单

输入分支名称回车创建一个新分支

使用【Enter】键可查看分支详情

2)切换分支

在分支面板使用上下键选中需要切换的分支

使用快捷键【Space(空格键)】即可切换分支

3)合并分支

切好到主分支,光标选中需要合并的分支(feat/login),然后使用快捷键【Shift+m】唤起合并菜单

选择合适的merge方式回车即可将分支合并到主分支

4)重置分支

如果在本地执行了 Merge,还没有把代码 Push 到远程仓库,可以使用 Undo功能撤销merge操作,直接使用快捷键【z】

如果 z 无法满足需求,或者想精准回退到某个版本,可以切换到提交记录面板使用快捷键【g】弹出重置选项菜单

选择重置模式回车,刚刚合并的变更就没了

5)删除分支

在分支面板,选中需要删除的分支,使用快捷键【d】唤起菜单

选择删除模式回车即可删除

代码管理

1)拉取代码

在分支面板使用快捷键【p】即可对当前分支执行pull操作

使用快捷键【f】可执行fetch操作

2)暂存代码

在项目中新建一个文件,可以在文件面板看到文件状态为【??】表示还未添加到工作区

使用快捷键【Space(空格键)】或者【a】将文件添加到工作区并暂存文件,可以在右下角【Command log】看到实时命令

3)放弃代码

在文件面板,使用快捷键【d】打开菜单

选择【Discard all changes】后,使用快捷键【Enter】或者双击即可放弃变更

4)提交代码

切换到分支面板,使用快捷键【c】填写提交信息

回车后即可在当前分支看到commit记录

使用快捷键【Shift+p】即可提交变更

Tag管理

1)创建Tag

1、在分支面板创建的Tag会以分支为基础创建 2、在Tags面板创建的Tag会以当前Tag为基础创建,会保留当前Tag的提交信息

在分支面板使用快捷键【Shift+t】或者切换到【Tags】使用快捷键【n】唤起Tag菜单

回车确定就创建了一个新的Tag

2)删除Tag

在分支面板切换到【Tags】,使用快捷键【d】唤起菜单

选择删除模式回车

Worktree

1)创建Worktree

选择分支面板,使用快捷键【w】创建Worktree,可以选择从主分支创建也可以选择从主分支某个Commit Hash创建

输入Worktree路径

输入分支名称

切换到文件面板,选中【Worktrees】可以看到刚刚创建的 ./worktrees/feat-login

2)删除Worktree

首先在分支面板切换到主分支

在文件面板切换到【Worktress】选择需要删除的Worktree,使用快捷键【d】

回车后Worktree就被删除了,注意这里只会删除Worktree并不会删除创建Worktree时创建的分支,如需删除分支需要单独删除

自定义命令

打开全局配置文件:

  • Linux: ~/.config/lazygit/config.yml

  • MacOS: ~/Library/Application\ Support/lazygit/config.yml

  • Windows: %LOCALAPPDATA%\lazygit\config.yml (default location, but it will also be found in %APPDATA%\lazygit\config.yml

这里我们在分支面板创建一个自定义命令,创建一个Tag并直接提交,使用快捷键【Shift+g】触发,在 config.yml文件中配置内容如下:

bash 复制代码
customCommands:
  - key: 'G'                    # 改用 Shift + T 触发
    context: 'localBranches'    # 作用范围设为本地分支面板
    command: 'git tag {{index .PromptResponses 0}} {{.SelectedLocalBranch.Name}} && git push origin {{index .PromptResponses 0}}'
    description: '为选中分支创建并推送 Tag'
    prompts:
      - type: 'input'
        title: '输入 Tag 名称:'
        initialValue: 'v'
    loadingText: '正在同步 Tag 到远程...'

重启lazygit CLI,切换到分支面板使用快捷键【Shift+g】触发

我们也可以以此类推在提交记录面板自定义类似的Tag命令

bash 复制代码
customCommands:
  - key: 't'
    context: 'commits'   # 仅在 Commits 提交面板生效
    command: 'git tag {{index .PromptResponses 0}}'
    description: '为选中的提交创建新标签'
    prompts:
      - type: 'input'
        title: '输入 Tag 名称:'
        initialValue: 'v1.0.'
    loadingText: '正在创建标签...'

友情提示

见原文:Git命令行可视化管理工具:lazygit

本文同步自微信公众号 "程序员小溪" ,这里只是同步,想看及时消息请移步我的公众号,不定时更新我的学习经验。友情提示友情提示

相关推荐
badhope2 小时前
入职第一天就把main分支搞崩了——我的Git血泪史和团队规范诞生记
git·devops
Eloudy4 小时前
git clone --mirror 完整迁移仓库的全流程
git
:-)19 小时前
开源项目二开 Git 规范工作流
git
阿米亚波1 天前
【C/C++包管理器】vcpkg(by microsoft)
c语言·c++·git·vscode·microsoft·github·vcpkg
苍煜1 天前
Git Worktree 多工作树实战教学-工作多分支实用教程
git
RainingTime1 天前
新版IDEA使用传统用户名、密码登录Git
git
DevangLic2 天前
【诡异的空文件夹 和 git:冲突合并】最新的尝试
git
舒一笑2 天前
Windows + WSL2 完整复现 Avernet WAIC 6 Bot 协作演示
人工智能·git·开源
生戎马 平安京策2 天前
git寻根——^和~的区别
git