跳到正文
FunCoding

搜索

搜索文档、Skill 和 MCP

Git Worktree 与会话分叉

区分新建、移动改动、复制对话及恢复已有 worktree,配置基线与路径。

Worktree 为同一个 Git 仓库提供另一份 checkout,适合隔离并行任务。它与只复制对话的 session fork 不同,也不会自动复制所有未提交文件。

选择操作

入口会话与文件行为
--worktree[=NAME]新建或复用隔离 worktree 并在其中启动
/worktree [branch 或 task]切到新 worktree,未提交改动留在原处
/move [branch 或 task]将未提交改动移到新 worktree 并切换
/new worktree新建空会话和 worktree,原会话及工作目录保持
/fork worktree保留当前对话上下文,在新 worktree 分叉
/fork [NAME]仅分叉会话;运行中的原会话继续在后台工作

这些 Git 操作需要仓库。task 可以是多行描述,作为新 worktree 的初始提示;省略参数时可按对话自动生成分支名。

启动示例

copilot --worktree docs-update -i "Update the installation guide and validate its links."

worktree 不能与 --resume、--continue、--connect 合用,它们竞争会话位置选择。需要恢复已有会话时使用对应恢复入口,不要同时请求新工作目录。

分支基线

worktreeBaseRef 默认 head,即当前 checkout 的 HEAD。设置为 defaultBranch 后,/worktree、/new worktree、/move 和 --worktree 使用远程默认分支。

/fork worktree 始终从 HEAD 分支,不受该设置影响。对话上下文被保留并不意味着所有文件改动也复制过去,选择 /move 前应确认确实需要转移未提交内容。

目录布局

默认目录为 <repo>.worktrees/,分支名中的斜杠会展平成连字符。worktreePathTemplate 支持 {repoPath}、{repo}、{branch}、{branchSlug},例如:

{
  "worktreePathTemplate": "~/src/worktrees/{repo}/{branch}"
}

自定义位置会影响之后创建的 worktree。加载的 --add-dir 和 --plugin-dir 相对路径按最终会话目录解析,不能按原终端位置想当然地计算。

旧命令

/worktree new 已弃用,改用 /new worktree;new 是保留子命令字,不能作为旧入口的字面分支名。完成任务后仍需检查 Git diff、测试和分支状态;会话结束不等于分支已合并。