A mouse-driven Git TUI: click to stage, line-numbered diffs, a lane-based commit graph and multi-bra
随时在终端里查看 Git
轻量、快速、可用鼠标操作
单个二进制,开箱即用,macOS / Linux / Windows 通用
简体中文 · 繁體中文 · English · 日本語 · 한국어
官网 · 快速开始 · 功能 · 快捷键 · 常见问题 · 参与贡献
+ / - 暂存,点目录折叠,滚轮翻历史,双击切分支,当然键盘也一样快。+增 -删,点开看改动,多文件提交一眼看清改了哪些。git。macOS · Homebrew
brew tap 0xBB2B/gitpane https://github.com/0xBB2B/gitpane
brew install 0xBB2B/gitpane/gitpane
Windows · Scoop
scoop bucket add gitpane https://github.com/0xBB2B/gitpane
scoop install gitpane
Linux / 从源码
go install github.com/0xBB2B/gitpane@latest
也可以直接从 Releases 下载对应平台的压缩包。
然后进到任意 Git 仓库里运行:
gitpane
按 ? 查看全部快捷键,q 退出。
![]() |
![]() |
| 变更:按目录树暂存 / 取消,右侧直接看 diff | 分支筛选:多选分支,双击切换 |
gitpane # 当前目录
gitpane ~/code/foo # 指定目录(仓库里任意子目录都行)
gitpane --lang en # 指定界面语言:zh-CN / zh-TW / en / ja / ko
gitpane --depth 3 # 当前目录不是仓库时,向下找 3 层子目录里的仓库(默认 2,0 关闭)
gitpane --layout stack # 强制上下布局;wide 强制左右
gitpane --embed # 面板模式:q 不退出,Ctrl+C 要按两次(嵌入其他分屏工具时用)
gitpane --version
宽度 ≥ 100 列时列表和详情左右并排,更窄时自动变成上下布局。
拖动中间的分隔线(上下布局时拖动详情区的标题栏)可以调整比例,也可以用 < > 微调、= 复位;每个标签页各自记住,下次启动沿用。
+增 -删 和状态字母。+ / - 暂存或取消,点目录的 + 整个目录一起,分组标题右侧按钮批量操作。w 可以改成截断显示(会记住)。╭ ╮ ╰ ╯ ├ ┤ ┴ ┼ 在同一行连好,每条分支颜色固定;◉ 是 HEAD,○ 是合并提交(标题淡显)。HEAD / 本地分支 / 远程分支 / 标签分色显示。b)打开分支面板,s 切换到该分支(远程分支会自动建跟踪分支)。+增 -删),点文件名展开 / 折叠它的改动;z 或标题栏右侧按钮全部展开 / 折叠。-u origin HEAD)、fetch、打标签(在图谱里选中提交按 T,回车创建并推送;push 时也会带上新建的标签)、放弃改动(两次确认)、git init。/ 筛选)。之后按 o 或点右上角的仓库名随时切换。git worktree 并行开发多个分支时,变更页标签栏右侧会出现「⎇ 工作树:分支名 ▾」(或按 t),+ / -,折行的长行拼回一行。| 键 | 作用 |
|---|---|
Tab 1 2 |
切换 变更 / 图谱 |
j k ↑ ↓ / g G |
移动 / 到顶到底 |
空格 |
暂存 / 取消暂存当前行 |
回车 ← → |
折叠 / 展开目录(在文件上按 ← 回到所在目录) |
z |
变更页:全部折叠 / 展开目录;图谱页:提交详情里全部展开 / 折叠文件 |
b |
打开分支筛选面板(空格勾选、a 显示全部、s 切换分支、Esc 返回) |
o |
切换子目录里的仓库(在非仓库目录启动时;/ 筛选,回车打开) |
t |
切换工作树(git worktree),查看各自未提交的改动 |
c |
提交(底部输入框,回车确认,Esc 取消) |
a / u |
全部暂存 / 全部取消暂存 |
x |
放弃当前文件改动(按两次确认) |
p / P / f |
pull / push / fetch |
T |
给图谱里选中的提交打标签(建议下一个版本号,Tab 填入;回车创建并推送) |
J K |
详情区翻页 |
w |
详情区长行自动换行 / 截断(会记住) |
< > / = |
移动列表和详情之间的分隔线 / 恢复默认比例 |
r |
立即刷新 |
? |
帮助 |
q / Ctrl+C |
退出(--embed 时 Ctrl+C 按两次) |
| 变量 | 说明 |
|---|---|
GITPANE_LANG |
界面语言:zh-CN / zh-TW / en / ja / ko(--lang 优先) |
GITPANE_DEPTH |
子仓库探测深度,默认 2,0 关闭(--depth 优先) |
GITPANE_THEME |
dark / light,自动检测不准时手动指定 |
GITPANE_NERD_FONT |
设为 1 显示 Nerd Font 文件 / 目录 / 分支图标 |
怎么复制界面上的文字?
直接用鼠标拖动选中,松开就复制到剪贴板(通过 SSH 使用时会通过终端的 OSC 52 复制到本机,tmux 里需要 set -g set-clipboard on)。
也可以按住 Shift 拖动(iTerm2 按住 Option,macOS 自带终端按住 Fn),使用终端自带的选择。
怎么切换界面语言?
默认按系统语言自动选择(依次看 LC_ALL、LC_MESSAGES、LANG,macOS 和 Windows 还会读系统设置),识别不出来时用简体中文。
想固定某种语言,可以每次加 --lang en,或者在 shell 配置里写 export GITPANE_LANG=ja(Windows:setx GITPANE_LANG ko)。
和 lazygit / tig 有什么不同?
Gitpane 更轻:只做最常用的暂存、提交、看 diff、看历史,主打鼠标直接点和好读的提交图谱,适合常驻在分屏一侧。需要 rebase、cherry-pick 等重度操作时,lazygit 依然是更好的选择。
会不会和其他工具(编辑器、AI 助手)抢 git 锁?
不会。Gitpane 读状态时设置了 GIT_OPTIONAL_LOCKS=0,不会占用 index.lock。
push / pull 需要密码时怎么办?
Gitpane 设置了 GIT_TERMINAL_PROMPT=0,需要密码时会直接报错,而不是把界面卡住。请使用 SSH key 或 credential helper。
macOS 提示「无法验证开发者」?
通过 Homebrew 安装会自动处理。如果是手动下载的二进制,运行一次 xattr -d com.apple.quarantine ./gitpane。
Windows 上显示错位或鼠标没反应?
请使用 Windows Terminal,老的 cmd 控制台对鼠标和线框字符支持不完整。
颜色不对 / 想要图标?
设置 GITPANE_THEME=light|dark 手动指定配色;终端用了 Nerd Font 的话,设置 GITPANE_NERD_FONT=1 显示文件图标。
main.go 命令行参数、版本信息、语言选择
docs/ Logo 和各语言的截图
.goreleaser.yaml 发布配置(六平台编译、Release、Homebrew cask、Scoop)
.github/workflows/
ci.yml 推送 / PR:三系统测试 + 打包演练
release.yml 推送 v* 标签:正式发布
internal/i18n/ 多语言:语言检测 + 各语言翻译表(测试保证没有漏翻)
internal/gitx/ git 命令封装(status、numstat、diff、提交、远程、分支)
graph.go 提交图谱的泳道布局(带单元测试)
discover.go 子仓库扫描(带单元测试)
worktree.go 工作树列表(带单元测试)
internal/ui/
model.go / update.go 状态、异步加载、键盘鼠标操作
view.go 布局(上下 / 左右)与渲染;同一个布局函数用于点击命中判断
diffview.go diff / 提交详情 / 图谱行的解析与绘制
render.go 快速着色(绕开 lipgloss.Render,滚动更流畅)
selection.go 鼠标拖动选中与复制(剪贴板 / OSC 52)
picker.go 分支筛选面板
repos.go 子仓库选择面板与切换
worktree.go 工作树选择面板与切换
split.go 列表 / 详情分隔线的拖动与保存
tree.go 变更文件 → 带连线的目录树
theme.go One Monokai / One Light 深浅两套配色、图标
欢迎 Issue 和 Pull Request。
git clone https://github.com/0xBB2B/gitpane && cd gitpane
go test ./... # 单元测试(含提交图谱布局、控制字符清洗、翻译完整性)
go run . ~/some/repo # 本地跑起来
提交信息建议使用 Conventional Commits(feat:、fix:、docs: …),Release 的更新日志会据此自动生成。
翻译:界面文字在代码里写简体中文原文,用 i18n.T("…") 包起来;其他语言的译文在 internal/i18n/catalog_*.go。
新增文案后 go test ./internal/i18n 会列出缺少的翻译。发现译得不地道,欢迎直接提 PR。
发布由 GitHub Actions + GoReleaser 自动完成:推送 v* 标签后,
编译 macOS / Linux / Windows × amd64 / arm64 六个版本,创建 GitHub Release,
并把 Homebrew cask 写进本仓库的 Casks/、Scoop 清单写进 bucket/,提交到 main。
本仓库同时就是 Homebrew tap 和 Scoop bucket,不需要另建仓库,也不需要额外的 token。
main 推一个 chore: … 提交,本地下次推送前先 git pull。main 开了分支保护,需要允许 GitHub Actions 推送,否则 cask / 清单更新会失败。Casks/ 和 bucket/ 是生成的,不要手改。git tag v0.1.0
git push origin v0.1.0
在 Actions 页面可以看到 release 流程。带 -rc / -beta 等后缀的标签(如 v0.2.0-rc1)
会标成预发布,不推送到 brew / scoop。
goreleaser check # 检查配置
goreleaser release --snapshot --clean --skip=publish # 只在 dist/ 里生成产物,不发布
MIT © 0xBB2B