v给同时开着好几个 AI agent 的 Mac 开发者

哪些可以放心删,
Orchard 给你依据。

Orchard 找出你 Mac 上所有的 git worktree,告诉你哪些早已在 main 里——squash 合并、rebase 合并也认得出——每个结论都附上能自己核对的依据。勾选、一次清理,7 天内随时恢复。还没落地的工作会一直标出来,一样也不会丢。

免费版不限时 不用注册账号 Apple 公证 后台只读
Orchard 的「可清理」页:8 个已经在 main 里或很久没动的 worktree,每个都写明原因(squash 合并、相同内容的提交、未提交的改动 main 里都已有),可释放 1.2 GB。
squash、rebase、普通 merge 都认得出 每次清理前先存快照 agent 正在用的 worktree 一律不动
3
层判断「是否已在 main 里」
7 天
清理之后随时恢复
6
类未落地的工作,一类不漏
0
次 force push、删除远端分支
问题

worktree 越开越多,
没人记得哪个还有用。

三个 agent 各占一个 worktree,主目录上又切着别的分支。一周之后,有的 PR 早就 squash 合并了,有的改动还躺在磁盘上,有的 commit 从来没 push 过。删哪个都心虚。

git 告诉你它们在哪

13 个
$ git worktree list ~/code/storefront 5d2c7e0 [main] ~/code/storefront-apple-pay 787882a [feat/apple-pay] ~/code/storefront-cart-rounding 3cbca05 [fix/cart-rounding] ~/code/storefront-order-history abf44dc [feat/order-history] ~/code/storefront-vite-6 8dee1e1 [chore/vite-6] ~/code/storefront-gift-cards 604a855 [feat/gift-cards] ~/code/storefront-edge-render 49d750a [spike/edge-render] ~/code/payments-api a4e19b2 [main] ~/code/payments-api-retry-budget c81f0d3 [fix/retry-budget] ~/code/payments-api-rate-limits 2b7a915 [feat/rate-limits] ~/code/payments-api-refunds e3d6c48 [feat/refunds] ~/code/payments-api-idempotency 2b7a915 [feat/idempotency]

Orchard 告诉你该怎么办

同一批
8
个可以放心清理 · 1.2 GB
「改动已整体合入 main(squash 合并)」——每个结论都带依据
清理
2
处工作还没落地
删掉就会丢。每处写明原因,右侧直接给出下一步
提交并建 PR
1
个 agent 正在工作
claude 正在 feat/idempotency 里工作,不打扰,也不会出现在可清理里
已经在 main 里了吗

不靠猜,
摆依据。

git branch --merged 认不出 squash 合并和 rebase 合并,于是满屏都是「未合并」,哪个都不敢删。Orchard 用三层判断,由快到慢,并把找到的东西原样写给你看。

  • 算出来的,不是猜的。由确定性的算法判断,AI 不参与「是否已在 main」,也不决定删什么。
  • 结论说人话。「1 个 commit 已以相同内容进入 main」「PR #142 已于 3 天前合并」,不会只丢一句「可以删」。
  • 和 GitHub 交叉核对。登录 gh 后,用 PR 状态再验证一遍提交层的结论。
在 Orchard 里选中一个 squash 合并过的 worktree,右侧写着「改动已整体合入 main(squash 合并)」。
01

提交层分支的最新提交已经是 main 的祖先。普通 merge 和 fast-forward 在这里认出来。

这里的内容都已经在 main 里
02

补丁层比对每个 commit 的补丁和整个分支的变化,认出 rebase、cherry-pick 和 squash,再用 GitHub 上的 PR 状态交叉核对。

改动已整体合入 main(squash 合并)PR #142 已于 3 天前合并
03

内容层连未提交的改动也逐块比对:main 里已经有一样的内容,或者它只是被后来的提交取代的旧版本。

未提交的改动 main 里都已有
清理

一次释放 1.2 GB,
7 天内随时反悔。

勾选已经用完的 worktree,一起清理。每一个都会进「最近清理」,旁边就是「恢复」按钮。

  • 先存快照。删除之前,未提交的改动(含新文件)和分支最新提交都存进 refs/orchard/trash/。
  • 被忽略的文件也照顾到。.env 这类不在 git 里的文件,会先提示你,再单独备份。
  • 远端一概不动。绝不删除远端分支,绝不 force push。
  • 只想要回空间?可以只清 node_modules 这类构建产物,保留 worktree。
清理了 7 个 worktree 之后的 Orchard:每一个都列在「最近清理」里,写着释放了多少空间、「7 天后过期」,旁边是「恢复」按钮。
还没落地的

没落地的工作,
一直摆在你眼前。

「待处理」只列删掉就会丢东西的 worktree。每张卡片写明具体原因,右侧直接给出下一步:提交并建 PR、把孤儿 commit 存为分支,或者交还给 agent 继续做。

Orchard 的「待处理」页:2 处工作还没落地,每张卡片有一句 AI 总结和「2 个文件未提交」这样的原因;右侧是 AI 总结:改了什么、进度、要留意的地方。
4 个文件未提交

未提交的改动

包括没被 git 跟踪的新文件。agent 写到一半的东西,大多在这里。

2 个 commit 未 push

已提交,没 push

只存在这台 Mac 上。已经进了 main 的那些不算,不会误报。

无远端跟踪

从没推到远端的分支

本地新建、远端从来没有过的分支,删掉 worktree 前最容易忽略。

2 个 stash

stash

按所属分支归到对应的 worktree 下,不再是一串看不懂的 stash@{3}。

孤儿 commit,切走就会丢

detached HEAD 上的 commit

不属于任何分支,一切走就找不回来。一键存为分支。

rebase 进行到一半

中断的操作

做到一半的 rebase、merge、cherry-pick。这样的 worktree 一律不允许清理。

main 虚线圈 = 未提交的改动 实心点 = 未 push 的 commit 已在 main 里
feat/checkout-redesign
刚从 main 分出来,还没有自己的工作
没有未落地的工作
分支轨

一条线,
看懂一个分支。

每张卡片左边都有一条分支轨:灰线是 main,曲线是这个 worktree 的分支。扫一眼就知道哪里有风险,鼠标悬停有文字解释。

安全

它很小心。
比凌晨两点的你更小心。

清理工具最怕的是删错。所以 Orchard 有几条写死在代码里的规则,每一条都有用真实 git 仓库跑的测试。

后台只读,不打扰正在干活的 agent

自动刷新只运行只读的 git 命令,并且带上 GIT_OPTIONAL_LOCKS=0,git status 不会刷新 index,不会和 agent 争 index.lock。唯一的后台写操作是 git fetch,可以关掉。

这几种情况,一律不让清理

有 agent 进程正在这个目录里工作;rebase、merge、cherry-pick 做到一半;主 worktree。按钮根本不会出现。

删除之前,先存一份

未提交的改动和分支最新提交存进 refs/orchard/trash/,7 天内一键恢复。被忽略的 .env 之类的文件,会先提示并备份。

绝不删除远端分支,绝不 force push

远端的东西一概不动。Orchard 也不建 worktree、不启动 agent,只观察和整理已经有的。

每个操作都先给你看命令

提交、推送、清理之前,要跑的每一条 git 命令都摆在你面前。确认弹窗只写事实:会发生什么、什么不受影响、怎么撤销。

你的代码留在你的 Mac 上

不上传仓库内容,不需要账号。AI 功能是可选的,用你自己的 ChatGPT 登录;不登录时,所有核心功能照样完整可用。

还有这些

从发现到收尾,
一个窗口做完。

提交并建 PR

AI 按改动内容把它们拆成几个 commit,起草 PR 标题和描述,并列出不会被提交的文件(比如 .env.local)。执行前,要跑的每一条命令都摆在你面前。

将执行 git add src/gift-cards.ts src/redeem.ts git commit -m "Redeem gift cards at checkout" git add src/flags.ts git commit -m "Add gift card feature flag" git push -u origin feat/gift-cards gh pr create --draft --title "Gift cards" # 含 TODO,默认 Draft

菜单栏常驻

没落地的工作,点一下就看到。

交给 Agent

把这个 worktree 的情况整理成一段说明,复制给 Claude Code 或 Codex,让它接着干。

已复制 · 分支 feat/gift-cards 有 2 个文件未提交、2 个 commit 没有推到远端。剩余:兑换流程的测试…

撞车预警

两个 agent 在不同的 worktree 里改了同一个文件?合并之前就提醒你。

feat/gift-cardscheckout.ts
fix/cart-roundingcheckout.ts

⌘K,用一句话找

按名字过滤;登录 ChatGPT 后,也可以按描述找。

⌘K上周那个改结算页的

实时,而且安静

用 FSEvents 监听文件变化,只刷新受影响的 worktree,自动忽略 node_modules 这类目录。PR 状态通过你已登录的 gh 每个仓库一次拉取。

Git 扫描于 2 秒前
价格

免费版不是试用版。

所有功能免费,不限时,不要账号。付费只为一件事:同时跟踪更多项目。

免费
免费永久

固定跟踪 1 个项目,这个项目里的 worktree 数量不限。

  • 1 个项目,worktree 不限
  • 六类未落地工作 + 三层落地判断
  • 清理与 7 天恢复、提交并建 PR
  • AI 总结与起草(用你的 ChatGPT 登录)
  • 菜单栏、实时更新、自动更新
免费下载
不需要账号,也不需要信用卡
License 首发价
一次付款

解锁全部项目。买断,不订阅,不设到期时间。

  • 全部项目同时跟踪
  • 免费版的一切功能
  • 同时激活 2 台 Mac
  • 换电脑时在设置里停用,名额立即释放
  • 支持独立开发者继续把它做好
购买 License
先用免费版,觉得值再买
常见问题

你可能想问

Orchard 怎么知道一个 worktree 可以放心删?

它按三层判断:分支的最新提交是否已在 main 的历史里;每个 commit 的补丁(或整个分支 squash 之后)是否和 main 里的某次提交一致,并用 GitHub 上的 PR 交叉核对;未提交的改动是否 main 里已经有了。由确定性的算法判断,AI 不参与。每个结论都附上原因,你可以自己核对。

不小心清理错了怎么办?

清理前,未提交的改动(含新文件)和分支的最新提交都会快照到 refs/orchard/trash/,默认保留 7 天,在「可清理 › 最近清理」里一键恢复。被 git 忽略的 .env 等文件不在快照里,清理前会单独提示并备份。

会不会和正在工作的 Claude Code、Codex 冲突?

不会。所有后台命令都带 GIT_OPTIONAL_LOCKS=0,不刷新 index,也就不会抢 index.lock。有 agent 进程正在某个 worktree 里工作时,那个 worktree 会显示为「Agent 工作中」,并且不允许清理。

Orchard 会改动我的仓库吗?

自动刷新只读。只有在你点了按钮之后(提交、建 PR、清理、存为分支)才会写入,执行前会把命令列出来。Orchard 不修改你的 git 配置,只额外写 refs/orchard/*,用来存放清理前的快照。

需要 GitHub 吗?支持 GitLab 吗?

核心功能只需要本机的 git。想看 PR 状态、用「提交并建 PR」,需要安装并登录 GitHub 官方的 gh 命令行。目前只支持 GitHub。

AI 功能怎么收费?我的代码会被发出去吗?

AI 是可选的,通过「用 ChatGPT 登录」调用,消耗的是你自己 ChatGPT 套餐的额度,Orchard 不额外收费。只有你登录并使用 AI 功能时,相关的改动内容才会发给 OpenAI;不登录时,没有任何代码离开你的 Mac。

免费版和 License 有什么区别?

只有一个区别:免费版固定跟踪 1 个项目,License 解锁全部项目。所有功能(包括 AI)在免费版里都完整可用,不限时,不需要账号。

系统要求是什么?

,的 Mac,需要安装 git。Orchard 经过 Apple 公证,并通过内置的自动更新获取新版本。

Orchard 图标

放心删,
删错了也能找回来。

一分钟装好,第一次扫描就知道哪些可以清理。