Git 面板
在产生这些改动的 shell 旁边暂存、审阅、提交和推送。
按 Cmd+Shift+G。面板会打开在项目所锚定的那个仓库上—— Zshell 怎么选这个目录,见项目目录。
这里的每一个操作都是 Zshell 代你执行的 git 命令;只要结果不止「完成了」这么简单,输出就会展示给你。除非你明确要求,否则不会有改写历史、squash 或强推。
Git 工具栏
Zshell 可以在当前标签页下方显示一条紧凑工具栏。在仓库里,它展示当前分支和总新增 / 删除行数;工作区没有改动时显示绿色 Clean,未跟踪文件也会算进新增行数。
- 点分支名可以搜索并切换本地分支,列表里会标出仓库默认分支。
- 点变更数字会打开 Git 面板。
- 不在仓库里时,Always Show 模式保留一个 No Git Repository 按钮,点它进入面板的初始化状态。
在 设置 → General 里选择 Hide、Auto 或 Always Show,也可以设置
toolbar.visibility。默认是 Hide。已经显示的工具栏也能从右键菜单里隐藏。
变更的文件
文件按冲突、已暂存和未暂存分组。把鼠标移到某一行会出现按钮,右键菜单里也有:
| 按钮 | 作用 |
|---|---|
| + | 暂存该文件 |
| − | 取消暂存 |
| ↺ | 丢弃它的改动 |
Discard All Changes 在面板头部,并且会先要求确认——它是这里唯一一个没法用另一条 git 命令撤回的操作。
冲突文件显示的是 Mark Resolved (Stage) 而不是普通的暂存按钮,让「标记为已解决」成为一个明确的动作,而不是顺手的副作用。
头部的漏斗按钮按文件名过滤列表,改动很多时这是最快的走法。
看 diff
点任意一个变更文件,它的 diff 会在一个窗格里打开,是在终端旁边而不是盖在上面。右键菜单里还可以 Open File(文件本身,可编辑)或 Open File to the Side。
大 diff 也不会卡。上千个文件的改动集,打开速度和一行的一样,滚动也不掉帧。
Diff 上方的控件会全局记住两组选择:
- Unified / Split 在单栏和左右对照布局之间切换。
- Review / Edit 只会出现在实时工作区里尚未暂存的文件上。进入 Edit 后可以直接改新版内容,用 Cmd+S 保存;有未保存内容时,关闭行为和普通编辑器一致。
已经暂存的 diff 和历史提交 diff 始终只读,因为它们是快照,不是 Zshell 可以安全写回的文件。在某个 diff 里切到 Edit 或 Split,会同步其他已打开 diff 的偏好,但不会让不符合条件的快照突然变得可编辑。
提交
写好信息用提交按钮,或者从它的菜单里挑:
- Commit Staged——只提交你暂存了的
- Stage All & Commit——先暂存所有已跟踪文件,再提交
- Amend Last Commit——把暂存的改动折进上一个提交
- Stage All & Amend
下方列着最近的提交,右键有 Copy Commit Hash 和 Copy Commit Message。
分支
头部的分支名是一个菜单:选另一个分支就切过去,或者选 Create New Branch… 从当前位置开一个新分支。
没有工作树的本地分支显示在“工作树”上方的“分支”列表中。点击分支可切换,右键可为它创建工作树或删除分支。上方搜索框同时筛选两组列表,两组也可以分别折叠。
工作树
Git 面板会列出这个仓库的所有工作树,以及它们对应的分支和检出路径。当前检出会标记为 Current。点某个工作树,就会在对应目录新开一个终端标签页;每个检出都有自己的 shell 上下文,同时仍属于同一个项目。工作树较多时,列表只在自己的限高区域内上下滚动,标题、提交控件和变更文件列表保持原位。单击工作树标题可以折叠或展开列表。
处于 detached HEAD 状态的工作树会显示 Detached HEAD,而不是分支名。裸仓库也会列出,但它没有工作目录,不能在终端标签页中打开。
工作树会话
在本地 Git 仓库的终端中,选择 终端 → 在工作树中新建会话…,或按 Cmd+Opt+T。标签页右键菜单和 + 按钮的右键菜单也提供此入口。选择新建或已有的本地分支,并指定尚不存在的目录。新分支默认从仓库的默认分支创建,也可明确选择 当前 HEAD;已有分支保留当前提交。建议目录位于源检出旁边。
分屏会继承会话的工作树关联,保存的布局也会恢复这一关联。关闭关联会话时,可选择 保留工作树、移除工作树 或 取消。只有检出中没有改动、未跟踪或忽略的文件,没有超出记录基准的提交,没有锁定,且没有其他已打开的会话使用它时,才允许移除。Git 分支始终保留。
外部终端可通过 zshell +session 创建和关闭会话。使用 projects 返回的 ID 指定 --project;在 Zshell 内则自动使用调用终端所属的项目。默认在后台创建会话,添加 --focus 可切换到新会话。--base HEAD 或 --base REF 指定其他基准,--worktree NEW_DIR 指定目录。需要选择特定运行实例时使用 --connection FILE。关闭默认保留工作树,只有明确添加 --remove-worktree 才请求清理;check 会报告当前是否可以安全清理。
zshell +session projects
zshell +session new --project PROJECT_ID --cwd /path/to/repo --branch feat/task
zshell +session list --project PROJECT_ID
zshell +session check --project PROJECT_ID --session SESSION_ID
zshell +session close --project PROJECT_ID --session SESSION_ID --remove-worktree远端
⋯ 菜单里是所有和远端打交道的操作:
| 操作 | 作用 |
|---|---|
| Fetch | 更新远程跟踪引用 |
| Pull (Fast-forward Only) | 拉取,拒绝产生合并提交 |
| Push | 推送当前分支 |
| Publish Branch | 推送还没有 upstream 的分支;远端不止一个时让你选 |
| Sync Changes | 先 fast-forward 拉取,再推送 |
| Stash All Changes | 把所有改动(含未跟踪文件)存进 stash |
| Pop Stash | 恢复最近一次 stash |
分支旁边的徽章显示你比 upstream ↓ 落后和 ↑ 领先多少。
同一个菜单里还有 Copy Changed Paths、Copy Repository Path 和 Reveal Repository in Finder。
拉取只做 fast-forward 是有意的。如果真需要 merge 或 rebase,git 会说出来,由你在终端里决定——面板不会替你挑策略。
还不是一个仓库
如果项目目录里没有仓库,面板会提供 Initialize Repository,它在那个文件夹里执行
git init。在那之前它不会碍事。
智能体轮次审阅
在 Git 面板点击审阅更改…,打开原生审阅窗口:
- 最近一轮比较所选智能体开始与结束时的快照,包含该时间段内工作区中所有来源的编辑。
- 未提交比较 HEAD 和当前工作区,包含已暂存与未跟踪文件。
- 整个分支比较与所选基准分支的共同祖先和当前工作区,包含提交及未提交文件。
选择文件和更改段后,最近一轮中的保留此段仅标记已审阅;回退此段在工作区反向应用该段。两者都不会改变 Git 暂存区。视图继续显示原始快照及每段的处理结果。
文件或 HEAD 后续变化、路径不安全、仓库中仍有活动智能体,或轮次互相重叠时,都会拒绝回退。二进制及仅权限变更只能查看。超过 5 MiB 的文件和不安全路径会标记为不可用;超过 2,048 个脏路径、25 MiB 捕获内容或捕获时间限制的快照不可用。
轮次快照仅保留于本次应用会话。必须有可靠的开始与完成事件:Pi、OpenCode、Grok 已有原生生命周期集成;受保护的智能体提示会捕获开始,但仍需完成事件。缺少事件时,最近一轮会明确提示暂无已完成快照。