Skip to content
FunCoding

Search

Search docs, Skills and MCP

Git Worktree 与会话分叉

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

This page has not been translated into English yet. The original Chinese version is shown below.

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、测试和分支状态;会话结束不等于分支已合并。