Back to projects

Retrace

Active

只读的多仓库 Git 审查工具:agent 在十几棵 worktree 里同时写代码,在一个窗口里看完它们写了什么,主干永远在最左列,点一个提交就看到说明和 diff。

macOS 桌面应用,免费下载(Apple 芯片和 Intel 都有)。还没经过 Apple 公证,第一次打开被拦时到「系统设置 → 隐私与安全性」点「仍要打开」。

Started
2026.11
Stack
RustTauriReactTypeScriptGit
Retrace

它是什么

一个 macOS 桌面应用,专门用来看 Git 历史,不用来写。把几个仓库加进来,所有项目、worktree 和分支都在一个窗口里:左边是项目和改动,右上是提交图,下面是你点开的那个提交——完整的提交说明、指向 GitHub 的 PR 链接、并排的 diff。

它不提交、不暂存、不合并、不变基。唯一的两种写操作是 git fetch 和在你确认后删掉已经合并的 worktree。

主界面:集成分支固定在第 0 列,点开一个 squash 合并的提交,上面是说明和 PR 链接,下面是并排 diff
主界面:集成分支固定在第 0 列,点开一个 squash 合并的提交,上面是说明和 PR 链接,下面是并排 diff

想回答的问题

agent 写代码以后,我的工作从「写」变成了「看」:同一时间有好几个 agent 各在一棵 worktree 里干活,我要知道每棵树里改了什么、哪些已经合进 main、哪些还挂着、某个提交当时到底动了哪些文件。现有的 Git 客户端是为「写」设计的,一个窗口只管一个仓库,提交图里主干会被分支挤来挤去,每个按钮都可能改到仓库。

Retrace 想回答:如果一个 Git 工具只为「审」服务,它应该长什么样。

几个设计取舍

  • 主干永远在最左列。 集成分支占提交图的第 0 列,是一条直线;agent 的分支从右边分出去、再汇回来。其他分支默认不画,要的时候再加。
  • worktree 按状态收纳。 主树之外分成「进行中」「已合并」「分支」三个下拉。已合并的可以安全删除:不加 --force,删之前逐棵复查,分支只用 git branch -d 删。
  • 只读要彻底。 agent 正在那些树里干活,所以每次调用 git 都带 GIT_OPTIONAL_LOCKS=0,不抢 index 锁;列改动只用不碰 index 的底层命令;判断 squash 合并时产生的临时对象写在仓库外面。
  • 点提交,看 diff。 点一行打开下方的说明和 diff,再点一次收起。正文默认完整显示,squash 或 merge 提交直接给出 PR 链接。也可以切到「文件」,看任一提交时的整个目录,Markdown 像 GitHub 一样渲染。
  • 一个窗口,挤不坏。 四块视图可以拖动停靠、交换位置,每块都有最小尺寸;设置和视图开关都在 macOS 菜单栏里,页面上只留看代码要用的东西。
进行中的 worktree 收在一个下拉里,带未提交文件数和领先 / 落后
进行中的 worktree 收在一个下拉里,带未提交文件数和领先 / 落后

现状

已发布 0.4.0:Apple 芯片和 Intel 两个版本,中文和英文界面,MIT 开源。官网 retrace.linjiejim.com 上有一张实时滚动的提交图,展示主干如何守住第 0 列。Windows 版还没做。