GitHub Blog
精选
65AI 编辑部评分,满分 100

GitHub Copilot 应用新增堆叠会话与拉取请求功能

2026-07-31 01:30· 2小时前· Cassidy Williams
跳到正文
精选理由

GitHub Copilot 的堆叠会话让多步骤 PR 拆分成链,Cassidy 用十年老项目演示如何避免巨型改动,对 Copilot 用户是可直接套用的实操指南。

AI 摘要

GitHub Copilot 应用推出堆叠会话功能,允许用户在同一个仓库中创建一系列相互承接的任务,每个会话可基于前一个会话的成果继续工作。作者通过一个十余年历史的个人项目演示了该功能:先使用 Plan 模式制定前端现代化计划,再通过堆叠会话将 React-Bootstrap 替换工作拆分为独立会话,并自动为每个会话创建对应的拉取请求,避免范围蔓延。

正文 · AI 翻译

请你先花点时间看看这张来自 GitHub Copilot 应用的截图。画面不大,图标很多,但它讲述了一个最精彩的故事,让我无比兴奋。

Screenshot of stacked sessions. They start with a folder 'Cass-kit', with 'Frontend modernization' below, and 'modernize frontend styles', 'Style port onto dev', and 'Remove react-bootstrap' all below.

这张图是一组堆叠的会话。它们是在同一个仓库中完成的一系列任务,每个会话都建立在彼此的基础之上!

下面会详细说明这些会话,但首先,为什么这张截图如此神奇?我们需要从十多年前说起。我有一个非常古老的个人应用仓库。它是我很久以前(大概是 2014 年底)首次创建的,这些年来它一直满足我的需求(它就像一个个人“生活”仪表盘,整合了日历、家里的智能设备和任务管理)。我偶尔会做一些更新,但维护起来越来越困难。

我的依赖项已经非常陈旧了。陈旧到令人尴尬。我还在用 React 15(2016 年发布)、Less 做 CSS 预处理,以及那个时期的 react-bootstrap 版本。是的,你没看错。Bootstrap。这确实很古老了。

在 AI 出现之前,想要理清这团乱麻得花上我几周时间。我以前尝试过,但最终放弃了。这虽然不是世界上最大的应用,但规模刚好大到让人头疼,投入产出比实在不划算。

……但我们现在有 AI 了,于是我启动了 GitHub Copilot 应用,添加了这个仓库,然后开始动手。

第一步:我能一次搞定吗?

不能。

不过我还是试了!这是我在 Plan 模式下使用的提示词:

I want to modernize the frontend for this project. I first wrote a lot of this code more than 10 years ago and it should be cleaned up a lot. I'm thinking we start either using Tailwind or just vanilla CSS (please vet everything to help me decide), we remove all Less (etc), and clean everything up accessibility-wise and responsiveness-wise. Right now I really want to just focus on styles, and then slowly but surely organize and consolidate the React functionality. It might be worth modernizing dependencies, too. Let's come up with a plan around this before diving in. 
 
1. Nothing is sacred, it's okay if we have to completely start over some parts 
2. Links should change colors and add underlines on hover/focus 
3. Input boxes should have a smaller border radius in general, and their labels should be cleaner 
4. There should be good wrapping and a max-width on containers so that an input box doesn't span an entire wide monitor.

我把它输入给 Claude Opus 4.8,又让 GPT-5.5 做了一次 Rubber Duck 审查,然后来回沟通了很多次来做决策。一旦我对结果满意,我就按下“开始”,让应用在我的项目上大展拳脚,看看它是否真的能行!

……结果不行,而且是我的错。

第二步:意识到我以前就尝试过

还记得我说过“我以前尝试过,但最终放弃了”吗?结果发现,我实际上有一个旧的功能分支,在那里我已经现代化了部分内容,但我当时没意识到会遇到兼容性问题。

不过,这其实是件好事!

当我从这次会话中运行新版本时,我意识到自己是从主分支拉出的分支,但我日常使用的当前部署版本,其实用的是开发分支上那个部分更新的版本。因此,我为自己制作的一些想要的功能需要包含在这组变更中。但这些变更的规模恰好大到让我不得不把这些改动应用到开发分支上,才能稍微保持头脑清醒,而不是把开发分支的变更合并到主分支。

在 AI 出现之前……天哪,这肯定会让我抓狂到扯头发。坦白说,这次我也确实很沮丧。我花了不少时间和模型 token,试图按照自认为还算不错的计划让这个跑起来。但是!我只需简单提个要求就能切换思路(和会话),这比我预想的要酷多了:

Screenshot of a conversation with Copilot. It starts with Copilot asking, 'Your decision when you're back (left to you — too consequential to guess): 1. Merge into main as-is, reconcile the master/dev fork separately; 2. re-apply just the styling + a11y improvements as a fresh branch off dev; 3. close this PR if dev's direction supersedes it. If you want option 2, I can start that port onto dev's Less + TypeScript structure.' Cassidy responds, 'Let's close this and start a new session as a fresh branch off of dev, yes.' Copilot responds, ' I'll close PR #573 and create a fresh session branched off dev to port the styling + a11y work.'

一切都没有白费!Copilot 为我创建了一个新会话,关闭了我之前尝试发起的拉取请求,并将我的样式决策移植到了它正在对开发分支应用的变更中。

第三步:测试后的发现

呼,好吧,我有了一个不错的分支,还有一个自己还算满意的拉取请求。然而,当我开始测试时,却不由自主地注意到控制台里出现了一些旧的警告信息。

看到对 `findDOMNode` 和 `componentWillReceiveProps` 的旧引用时,我心中充满了恐惧——这些函数我自己已经好多年没碰过了。唉。

这些引用在我的代码库里已经不多见了,但它们存在于 react-bootstrap 中。我再次打开“计划”模式,因为需要弄清楚是升级能解决问题,还是应该彻底移除这个库:

Do you think we should remove react-bootstrap entirely (and replace with a modern alternative), or just upgrade/migrate existing components?

运行这个给了我一个不错的计划,讨论了各种选项,并建议完全替换掉这个库。

第四步:在已有会话之上叠加新会话

我需要确保我的变更不会影响现有的工作,但替换 react-bootstrap 对于我当前正在做的事情来说,感觉范围蔓延得太厉害了。

我发现,在我很多“智能体式”的工程工作中,特别难以避免这种范围蔓延。因为不需要自己写所有代码,所以很容易就搞出一个一万行的拉取请求,把我所有想做的事情都一次性搞定!这其实只是一种新形式的拖延症,哈哈。

所以,我没有为自己创建一个巨大的合并请求来测试,而是开启了一个新会话,并给出了提示词:

Let's make a pull request for the existing work, and then start a new session for this react-bootstrap replacement work that will branch off this existing work here, and be a separate pull request to merge into dev after this one. 

正是这个部分让我觉得神奇到想写这篇博客。GitHub Copilot 应用:

  1. 为我当前所有基于 dev 分支的改动创建了一个合并请求
  2. 为移除 react-bootstrap 创建了一个“堆叠会话”(它利用了之前的上下文,创建了一个在当前会话之后运行的会话,制定了一个计划,让我批准该计划,然后执行)
  3. 在我现有工作的基础上创建了一个堆叠合并请求

这太酷了。堆叠会话和堆叠合并请求?这就是未来吗?

是的。

如果你光看名字不明白这是什么意思:堆叠是指同一个仓库中的一系列合并请求,其中每个合并请求的目标分支都是它下面那个合并请求的分支,从而形成一个有序的链条,最终合并到你的主分支上。

在我的例子中,不仅是会话一个接一个地执行,它们的改动也是相互衔接的!

第五步:带着堆叠合并请求扬帆远航

我知道我的兴奋之情有点得意忘形,但我的快乐是真诚的。在长期忽视我的旧代码库之后,如此轻松地交付这些改动是一种令人愉快的体验。

我们再来看一下第一张截图:我来为你逐步讲解。

Screenshot of stacked sessions. They start with a folder 'Cass-kit', with 'Frontend modernization' below, and 'modernize frontend styles', 'Style port onto dev', and 'Remove react-bootstrap' all below.
  • 最上面,你可以看到我拉取进来的仓库。
  • 接下来的“前端现代化”是初始会话的名称。
  • 再下一层嵌套的是第一次尝试创建的合并请求,我们最终没有交付(所以是红色图标)。
  • 同一层级的下一个嵌套是我们为 dev 分支创建的一个可用的合并请求。
  • 再下面的那个嵌套会话是正在进行中的草稿合并请求,包含了 react-bootstrap 的改动。

软件开发从来都不是一帆风顺的。但有了这些现代工具,这个项目变得容易多了。

如果你也想现代化自己的代码库,不妨试试这个!

在 GitHub 上提交代码的任何地方,都可以查看合并请求堆叠,以及在 GitHub Copilot 应用中查看堆叠会话。

GitHub Copilot 应用新增堆叠会话与拉取请求功能

GitHub Blog·2026-07-31 01:30·2小时前·Cassidy Williams
阅读原文· github.blog
精选理由

GitHub Copilot 的堆叠会话让多步骤 PR 拆分成链,Cassidy 用十年老项目演示如何避免巨型改动,对 Copilot 用户是可直接套用的实操指南。

AI 摘要

GitHub Copilot 应用推出堆叠会话功能,允许用户在同一个仓库中创建一系列相互承接的任务,每个会话可基于前一个会话的成果继续工作。作者通过一个十余年历史的个人项目演示了该功能:先使用 Plan 模式制定前端现代化计划,再通过堆叠会话将 React-Bootstrap 替换工作拆分为独立会话,并自动为每个会话创建对应的拉取请求,避免范围蔓延。

正文 · AI 翻译

请你先花点时间看看这张来自 GitHub Copilot 应用的截图。画面不大,图标很多,但它讲述了一个最精彩的故事,让我无比兴奋。

Screenshot of stacked sessions. They start with a folder 'Cass-kit', with 'Frontend modernization' below, and 'modernize frontend styles', 'Style port onto dev', and 'Remove react-bootstrap' all below.

这张图是一组堆叠的会话。它们是在同一个仓库中完成的一系列任务,每个会话都建立在彼此的基础之上!

下面会详细说明这些会话,但首先,为什么这张截图如此神奇?我们需要从十多年前说起。我有一个非常古老的个人应用仓库。它是我很久以前(大概是 2014 年底)首次创建的,这些年来它一直满足我的需求(它就像一个个人“生活”仪表盘,整合了日历、家里的智能设备和任务管理)。我偶尔会做一些更新,但维护起来越来越困难。

我的依赖项已经非常陈旧了。陈旧到令人尴尬。我还在用 React 15(2016 年发布)、Less 做 CSS 预处理,以及那个时期的 react-bootstrap 版本。是的,你没看错。Bootstrap。这确实很古老了。

在 AI 出现之前,想要理清这团乱麻得花上我几周时间。我以前尝试过,但最终放弃了。这虽然不是世界上最大的应用,但规模刚好大到让人头疼,投入产出比实在不划算。

……但我们现在有 AI 了,于是我启动了 GitHub Copilot 应用,添加了这个仓库,然后开始动手。

第一步:我能一次搞定吗?

不能。

不过我还是试了!这是我在 Plan 模式下使用的提示词:

I want to modernize the frontend for this project. I first wrote a lot of this code more than 10 years ago and it should be cleaned up a lot. I'm thinking we start either using Tailwind or just vanilla CSS (please vet everything to help me decide), we remove all Less (etc), and clean everything up accessibility-wise and responsiveness-wise. Right now I really want to just focus on styles, and then slowly but surely organize and consolidate the React functionality. It might be worth modernizing dependencies, too. Let's come up with a plan around this before diving in. 
 
1. Nothing is sacred, it's okay if we have to completely start over some parts 
2. Links should change colors and add underlines on hover/focus 
3. Input boxes should have a smaller border radius in general, and their labels should be cleaner 
4. There should be good wrapping and a max-width on containers so that an input box doesn't span an entire wide monitor.

我把它输入给 Claude Opus 4.8,又让 GPT-5.5 做了一次 Rubber Duck 审查,然后来回沟通了很多次来做决策。一旦我对结果满意,我就按下“开始”,让应用在我的项目上大展拳脚,看看它是否真的能行!

……结果不行,而且是我的错。

第二步:意识到我以前就尝试过

还记得我说过“我以前尝试过,但最终放弃了”吗?结果发现,我实际上有一个旧的功能分支,在那里我已经现代化了部分内容,但我当时没意识到会遇到兼容性问题。

不过,这其实是件好事!

当我从这次会话中运行新版本时,我意识到自己是从主分支拉出的分支,但我日常使用的当前部署版本,其实用的是开发分支上那个部分更新的版本。因此,我为自己制作的一些想要的功能需要包含在这组变更中。但这些变更的规模恰好大到让我不得不把这些改动应用到开发分支上,才能稍微保持头脑清醒,而不是把开发分支的变更合并到主分支。

在 AI 出现之前……天哪,这肯定会让我抓狂到扯头发。坦白说,这次我也确实很沮丧。我花了不少时间和模型 token,试图按照自认为还算不错的计划让这个跑起来。但是!我只需简单提个要求就能切换思路(和会话),这比我预想的要酷多了:

Screenshot of a conversation with Copilot. It starts with Copilot asking, 'Your decision when you're back (left to you — too consequential to guess): 1. Merge into main as-is, reconcile the master/dev fork separately; 2. re-apply just the styling + a11y improvements as a fresh branch off dev; 3. close this PR if dev's direction supersedes it. If you want option 2, I can start that port onto dev's Less + TypeScript structure.' Cassidy responds, 'Let's close this and start a new session as a fresh branch off of dev, yes.' Copilot responds, ' I'll close PR #573 and create a fresh session branched off dev to port the styling + a11y work.'

一切都没有白费!Copilot 为我创建了一个新会话,关闭了我之前尝试发起的拉取请求,并将我的样式决策移植到了它正在对开发分支应用的变更中。

第三步:测试后的发现

呼,好吧,我有了一个不错的分支,还有一个自己还算满意的拉取请求。然而,当我开始测试时,却不由自主地注意到控制台里出现了一些旧的警告信息。

看到对 `findDOMNode` 和 `componentWillReceiveProps` 的旧引用时,我心中充满了恐惧——这些函数我自己已经好多年没碰过了。唉。

这些引用在我的代码库里已经不多见了,但它们存在于 react-bootstrap 中。我再次打开“计划”模式,因为需要弄清楚是升级能解决问题,还是应该彻底移除这个库:

Do you think we should remove react-bootstrap entirely (and replace with a modern alternative), or just upgrade/migrate existing components?

运行这个给了我一个不错的计划,讨论了各种选项,并建议完全替换掉这个库。

第四步:在已有会话之上叠加新会话

我需要确保我的变更不会影响现有的工作,但替换 react-bootstrap 对于我当前正在做的事情来说,感觉范围蔓延得太厉害了。

我发现,在我很多“智能体式”的工程工作中,特别难以避免这种范围蔓延。因为不需要自己写所有代码,所以很容易就搞出一个一万行的拉取请求,把我所有想做的事情都一次性搞定!这其实只是一种新形式的拖延症,哈哈。

所以,我没有为自己创建一个巨大的合并请求来测试,而是开启了一个新会话,并给出了提示词:

Let's make a pull request for the existing work, and then start a new session for this react-bootstrap replacement work that will branch off this existing work here, and be a separate pull request to merge into dev after this one. 

正是这个部分让我觉得神奇到想写这篇博客。GitHub Copilot 应用:

  1. 为我当前所有基于 dev 分支的改动创建了一个合并请求
  2. 为移除 react-bootstrap 创建了一个“堆叠会话”(它利用了之前的上下文,创建了一个在当前会话之后运行的会话,制定了一个计划,让我批准该计划,然后执行)
  3. 在我现有工作的基础上创建了一个堆叠合并请求

这太酷了。堆叠会话和堆叠合并请求?这就是未来吗?

是的。

如果你光看名字不明白这是什么意思:堆叠是指同一个仓库中的一系列合并请求,其中每个合并请求的目标分支都是它下面那个合并请求的分支,从而形成一个有序的链条,最终合并到你的主分支上。

在我的例子中,不仅是会话一个接一个地执行,它们的改动也是相互衔接的!

第五步:带着堆叠合并请求扬帆远航

我知道我的兴奋之情有点得意忘形,但我的快乐是真诚的。在长期忽视我的旧代码库之后,如此轻松地交付这些改动是一种令人愉快的体验。

我们再来看一下第一张截图:我来为你逐步讲解。

Screenshot of stacked sessions. They start with a folder 'Cass-kit', with 'Frontend modernization' below, and 'modernize frontend styles', 'Style port onto dev', and 'Remove react-bootstrap' all below.
  • 最上面,你可以看到我拉取进来的仓库。
  • 接下来的“前端现代化”是初始会话的名称。
  • 再下一层嵌套的是第一次尝试创建的合并请求,我们最终没有交付(所以是红色图标)。
  • 同一层级的下一个嵌套是我们为 dev 分支创建的一个可用的合并请求。
  • 再下面的那个嵌套会话是正在进行中的草稿合并请求,包含了 react-bootstrap 的改动。

软件开发从来都不是一帆风顺的。但有了这些现代工具,这个项目变得容易多了。

如果你也想现代化自己的代码库,不妨试试这个!

在 GitHub 上提交代码的任何地方,都可以查看合并请求堆叠,以及在 GitHub Copilot 应用中查看堆叠会话。

阅读原文github.blog