zshell

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 已有原生生命周期集成;受保护的智能体提示会捕获开始,但仍需完成事件。缺少事件时,最近一轮会明确提示暂无已完成快照。