这次加了什么

过去在 Copilot app 里开一个会话,改到一半想切到编辑器继续,通常的做法是把改动复制出来、在本地重建分支、再手动把新提交连回 PR。10 月 19 日官方博客更新了一条:从 Copilot app 的会话里点 Open in VS Code,VS Code 会用这个会话关联的 Git worktree 打开项目,并在 Copilot sidebar 里显示现有会话。原文强调的不是"复制会话",而是继续现有会话——不是在新窗口里重建一个。

session context、diff 与 worktree

要看懂这个按钮为什么能做到不断档,得先知道会话里存了什么。原文说 session 不只是被改的文件,还记录 task、plan、conversation,并且关联 isolated worktree、branch,以及跟踪这项工作的 PR。

三件套各自的职责:

  • session context:task、plan、conversation,也就是当时在干什么、打算怎么干、聊了什么。
  • diff:落到文件上的实际改动,是最后要过一遍的产物。
  • worktree:一个隔离的工作副本,改动物理上就发生在这里,branch 也挂在这里。

互联关系是这样的。worktree 保证 VS Code 打开的目录就是改动所在的那个目录,不用跨目录复制文件;branch 保证 push 的目标正确;PR 是已经跟踪这项工作的那一个,不是新建的。session context 则让 Copilot sidebar 里的会话还能接着问下去——它知道前面的 task 和 plan,你不需要从头描述任务。

少一件都会断。只有 diff 没有 worktree,就得手动重建分支;有 worktree 而没有 session context,切过来只剩文件改动,之前的意图丢了,追问时又要把背景复述一遍。三件套一起搬过去,才是"接力"而不是"搬运"。

走一遍完整流程

1. 前提检查:Copilot app 已安装并登录,VS Code 连接同一个 GitHub 账户,会话里已经有 code changes,且对该仓库有工作与推送权限。原文还默认读者熟悉 VS Code 导航、integrated terminal 以及 Git 分支与 PR。

2. Open in VS Code:在 Copilot app 的会话里点这个按钮,VS Code 以该会话的 worktree 打开项目,Copilot sidebar 显示现有会话。

3. 审查:打开 Source Control view 看被改的文件,逐行 review。原文给的审查清单共 5 条:是否解决了问题、是否遵循仓库规范、错误与边界情况是否处理、测试是否覆盖行为、有没有无关文件的改动。

4. 继续追问:会话还在,可以直接问。原文的例子是——

"Explain why you changed this function instead of adding a new helper. Identify any behavior this could affect."

不用先花三段描述背景,这是会话接力最实际的收益。

5. 手工编辑:直接改任何文件,改的就是会话已有的 worktree。适合改 label 与报错文案、变量改名、布局样式、补测试、套仓库规范。

6. 本地验证:在 integrated terminal 里跑仓库正常的验证流程,Web 应用的示例命令是 npm install、npm test、npm run lint、npm run dev。可按设置在 VS Code's integrated browser 里打开 localhost URL;UI 改动要检查不同 viewport,以及 loading / empty / error 三种状态。

7. 提交推送:final diff 再核一遍,之后在 Source Control view 或终端提交:

git status
git add .
git commit -m "Refine session changes"
git push

推的是会话关联的那个 branch,会更新已经在跟踪这项工作的 PR。原文特别点明两件不再需要做的事:把文件复制到另一个 checkout,以及手动把新提交重新连到 PR。

第 4、5 步可以交替着来。原文的建议是仓库级分析、重复编辑交给 Copilot,精确的小改手动做,两种交替进行。

边界与限制

原文逐条列了限制,照搬如下:

  • 必须使用同一个 GitHub 账户。
  • 对该仓库需要有工作与推送权限。
  • 装了多个编辑器或多个 VS Code 安装时,要手动选择。
  • 验证命令按仓库而异,上面的 npm 命令只是 Web 应用的示例。
  • integrated browser 是有条件支持。
  • 不免除人工验证。
  • 不绕过 branch、commit、review、approval 的协作流程。
  • 整套机制依赖会话已经关联了 worktree、branch、PR。
  • 目前只讲 VS Code。

其中有一条需要单独提:原文没有讲会话没有关联 PR 时怎么办。整个叙述都建立在"PR 已经在跟踪这项工作"的前提上,缺了这个前提,流程走到第 7 步会是什么行为,文档里没有答案。

待观察

几个原文没覆盖的点。编辑器支持目前只有 VS Code,其他编辑器什么时候有、是不是同样的三件套机制,没有说法。没有 PR 的场景如何处理,是会在打开时自动创建、还是要求先建 PR,需要实际用一次才知道。权限粒度也不清楚:原文只要求"工作与推送权限",没有更细的分级。另外,Copilot app 与命令行侧的能力是否对齐——比如在哪个入口发起的会话都能被接力——原文没有涉及。

对日常开发来说,这套机制解决的是一个具体的断点:AI 会话和本地工作副本过去是两套状态,现在被 worktree 与 branch 绑到了一起。它不减少审查和验证的工作量,减少的是切换时那些纯粹搬运性质的动作。