技术速递|GitHub Copilot App 中的堆叠会话与拉取请求

技术速递|GitHub Copilot App 中的堆叠会话与拉取请求

作者:Cassidy Williams

排版:Alan Wang

了解我是如何使用 GitHub Copilot 应用中的堆叠会话和拉取请求,对我一个旧代码库进行现代化改造。

我想让你花一点时间看看这张截图,它来自 GitHub Copilot App。它很小,图标很多,但它讲述了一个我真的非常兴奋的故事。

这张图是一组堆叠的会话。它们是一系列在同一个仓库中的任务,每个会话都建立在前一个会话之上。

下面会详细介绍这些内容,但首先,为什么这张截图这么神奇?我们要回到十多年前。我的这个仓库是我个人应用的旧仓库。我最早是在 2014 年末左右创建的,它多年来一直按我想要的方式运行(它就像我家里日历、智能设备和任务管理的个人"生活"仪表盘)。我偶尔会做一些更新,但这些更新越来越难以处理。

我的依赖项已经变得非常老旧。老旧得有点尴尬。我当时使用的是 React 15(发布于 2016 年)、Less 作为 CSS 预处理器,以及大约那个时期的 react-bootstrap 版本。对,你没看错。Bootstrap。那真的是很老了。

在 AI 出现之前,要把这个一团糟的东西理清,可能需要花我几周时间。我之前尝试过,但也放弃过。它不是世界上最大的应用,但也刚好大到足够痛苦,而且收益远远不值得付出这么大代价。

但......现在我们确实有 AI 了,所以我启动了 GitHub Copilot App,添加了这个仓库,并开始动手了。

第一步:我能一次性完成吗?

不能。

我还是尝试了一下!这是我在 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 review,还进行了很多来回沟通来做决策。一旦我达到了满意的状态,我点击了"go",让应用在我的项目里大干一场,看看它是否可行!

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

第二步:意识到我之前已经尝试过这件事

所以,记得我之前说过我"尝试过但放弃了"吗?原来,我实际上有一个旧的 dev 分支,里面真的已经现代化了部分内容,我之前却没有意识到兼容性问题。

但这也不失为一件好事!

当我在这个会话中运行新版本时,我发现自己是在从 main 分支分出,但我平时实际在使用的部署版本,使用的是我在 dev 分支上部分更新后的版本。所以,一些我为自己做出来的想要功能,需要纳入这组改动中。不过,这些改动刚好足够大,以至于我实际上需要把这些改动应用到 dev 分支上,才能保住我的一点理智,而不是把 dev 里的修改合并进 main

在 AI 出现之前......天哪,这会让我在挫败感中抓狂。我承认这里也让我很沮丧。我已经花了时间和 tokens 试着让它跑起来,而且我以为自己的计划还不错。但!我能够通过一个简单的请求切换方向(并切换会话),这比我想象中更酷:

所有这些都没有白费!Copilot 为我新建了一个会话,关闭了我之前试图提交的拉取请求,并将我的样式决策移植到它正在应用到 dev 分支的改动中。

第三步:测试后的发现

哎呀,好吧,所以我有了一个不错的分支,也有一个我还算满意的拉取请求。开始测试后,我却忍不住注意到控制台里有一些旧警告。

当我看到旧的 findDOMNodecomponentWillReceiveProps 引用时,我的心里充满了恐惧。这些函数我已经多年没有碰过了。啊。

这些引用在我的代码库里不算很多了,但它们在 react-bootstrap 里面。于是我又打开了 Plan 模式,因为我需要弄清楚是升级会可行,还是应该完全移除这个库:

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

运行后,它给了我一个不错的计划,讨论了各种选项,并推荐直接替换整个库。

第四步:在另一个会话之上堆叠会话

我需要确保我的改动不会受到现有工作的影响,但 react-bootstrap 替换工作感觉像是对当前工作的一种相当大的范围扩张。

我发现,在很多智能体工程工作中,这种范围扩张特别难以避免。因为我不需要自己写所有代码,所以很容易诱使我去提交一份 10,000 行的巨型拉取请求,处理我想做的所有事情!这其实只是另一种形式的拖延,哈哈。

所以,我没有为自己做一个超大拉取请求来测试,而是把它拆成了一个新的会话,并给它输入了这样的提示:

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 App:

  1. 为我当前所有改动创建了一个拉取请求,基于 dev 分支

  2. 为 react-bootstrap 移除工作创建了一个"堆叠会话"(它采用了之前的上下文,创建了一个在现有会话之后运行的会话,制定了计划,让我批准了计划,然后开始运行)

  3. 按照我现有的工作,创建了一个堆叠式拉取请求

这太酷了。堆叠会话和堆叠式拉取请求?这就是未来吗?

是的。

如果你不清楚"堆叠"这个名字是什么意思:堆叠是一系列在同一仓库中的拉取请求,每个拉取请求都指向其下方拉取请求的分支,形成一个有序链条,最终落到你的主分支上。

在我的情况下,不仅会话彼此跟随,而且它们的改动也跟随。

第五步:与堆叠的拉取请求一起扬帆远航

我知道我对这件事的兴奋有点调侃意味,但我的开心是真诚的。能如此轻松地交付这些改动,对我这个长期忽略旧代码库的人来说,真是一种愉快的体验。

让我们再看一次第一张截图:我来逐一解释。

  • 在顶部,你可以看到我拉入的仓库。

  • 接下来"Frontend modernization" 是初始会话的名称。

  • 下一层嵌套的是第一次拉取请求尝试,最终我们没有发布它(因此有红色图标)。

  • 同一层级的下一个嵌套项是我们在 dev 分支上获得一个可用拉取请求的地方。

  • 下面那一层嵌套会话是正在进行中的草稿拉取请求,其中包含 react-bootstrap 的改动。

软件开发从来都不是什么顺风顺水的事。但这次项目因为这些现代工具变得容易了很多。

如果你想为自己的代码库做现代化改造,不妨试一试!

在 GitHub 上提交代码的任何位置查看拉取请求堆栈,并在 GitHub Copilot App 中查看堆叠会话 >

相关推荐
GlobalInfo1 小时前
AI与另类数据融合,市场研究正在从“经验驱动”走向“数据智能”
大数据·网络·人工智能·ai
武子康1 小时前
Pi Agent 为什么不内置 MCP:工具发现与上下文成本的真实争议
人工智能·llm·agent
用户469368483201 小时前
kimi-code 深度掌握系列文章-V2 引擎的 HTTP 服务层:kap-server(十六)
agent
dong_junshuai2 小时前
每天一个开源项目#67 Orca:4.3万星的并行 AI 编程控制台
程序员·开源·github
Do1you1believe1light2 小时前
我拆开了 Prime Agent:然后哭着想要给它真正的智能
llm·agent·ai编程
ppwangGS2 小时前
我的AI应用实践之路:从工作流到智能体(系列规划与第一篇)
人工智能·ai·学习方法
joinwell522 小时前
一个 Agent 说“完成了”,团队为什么没放行?
agent
南方程序猴2 小时前
Codex 将再次重置:GPT-6.0 发布前的黑暗时刻
人工智能·gpt·ai·ai编程
飞扬的风信子2 小时前
架构文档 — local-model-harness
agent·vibecoding