Git 工作树
工作树(Worktree)让不同任务在相互隔离的 Git 环境中执行。当你需要在同一个项目里并行处理多个任务——比如一边开发新功能、一边修复紧急 Bug——又不希望两边改动互相踩踏时,工作树是理想选择。
每个工作树是一个独立目录,拥有专属的文件、分支和代码变更。你的主工作目录保持整洁不受干扰,任务结束后再把成果合并回来。
名词解释
| 名词 | 描述 |
|---|---|
| 工作树 | Git 的原生机制,允许一个仓库同时拥有多个独立的工作目录,每个目录检出不同分支 |
| 工作树分支 | 某个工作树当前检出的分支,命名形如 lanmate/task-8c295571 |
| 工作树目录 | 工作树对应的本地文件夹。LanMate 统一放在 ~/.lanmate/worktrees/<项目>/ 受管根下 |
| 基础分支 | 工作树创建时基于的分支,任务改动最终静默合并回这条分支 |
工作树不会建在你的项目仓库里(git status 里不会多出目录),而是集中在 LanMate 自己的目录下,按项目归类、统一管理。
适用范围与前置条件
- 项目是 Git 仓库(本地编码任务)
- 本机已安装 Git
非 Git 项目或不涉及代码改动的办公任务,直接在项目当前目录执行即可,无需工作树。
四类工作树来源
| 来源 | 何时创建 | 命名 |
|---|---|---|
| 任务 | 输入框选择「新工作树」后发出任务 | task-<会话8位> |
| 分叉 | 会话分叉时选择「在新工作树中继续」 | fork-<会话8位> |
| 子代理 | 编码任务的子代理需要隔离环境时 | subagent-<代理8位> |
| 看板 | 看板任务派发给 Agent 执行时 | taskboard-<任务> |
四类工作树都在设置 → Git → 工作树中统一可见、可清理,并按来源标注。
为新任务创建工作树
- 在 Git 项目的对话输入框下方,找到 Git 工作区选择器
- 默认是「本地」(使用项目当前工作树),切换为「新工作树」
- 可选:点击分支选择基线分支(默认当前分支)
- 发出任务,LanMate 自动创建专属工作树
任务启动后,会话顶部的置顶摘要会显示当前工作树分支,确认改动隔离生效。
在新工作树中继续
对话进行到某处想换一条路,又不污染原工作区:
- 悬停目标消息,点击「分叉」
- Git 项目会弹出二选一:新聊天(同目录继续)或 在新工作树中继续
- 选择新工作树后,分叉携带源检出的未提交现场(含未跟踪文件),在途改动不会丢失
详见会话管理。
AI 合并
任务完成、改动验证无误后,把工作树成果合并回基础分支:
- 打开会话顶部置顶摘要,展开 Git 状态
- 工作树行点击「AI 合并」
- Agent 会先审查工作树的改动,按项目提交规范补齐提交,再合并回基础分支;出现冲突时按仓库惯例解决
合并是 Agent 执行的完整 Git 流程,过程透明可追溯;对合并策略有特殊要求时,也可以直接在对话里说明。
查看磁盘占用
工作树是完整检出目录,会占磁盘空间。随时可查:
- 前往设置 → Git → 工作树
- 「工作树磁盘占用」区域列出全部工作树的占用大小、分支、上次使用时间,按来源分类
当项目工作树总占用达到你在设置中配置的阈值时,输入框上方会出现提醒条,可一键前往清理。
清理工作树
清理会删除工作树目录释放磁盘,对话历史与代码变更记录保留。清理时可勾选「保留分支」——只删目录,分支留下,之后仍可从分支找回改动。
入口:设置 → Git → 工作树 → 勾选目标工作树 → 清理所选。
子代理工作树有快照保护:清理前会先把未提交改动存到 lanmate/subagent-* 快照分支,目录删了产出也能从分支找回。
相关设置
| 设置 | 位置 | 说明 |
|---|---|---|
| 清理时默认保留分支 | 设置 → Git → 工作树 | 开启后清理确认弹窗默认勾选「保留分支」 |
| 磁盘占用提醒(GB) | 设置 → Git → 工作树 | 工作树总占用达到阈值时在输入框提醒;设为 0 关闭 |