如何在AWS CodeCommit实现GitHub的PR基础分支删除后自动变更目标分支功能?
在AWS CodeCommit中实现类似GitHub的PR基础分支自动切换行为
场景说明
- 现有分支结构:
Dev主分支,加上两个特性分支A和B - 预期流程:先把B合并到A,再把A合并到Dev;每次合并完成后,被合并的分支会立即删除
- 实际操作:先创建两个Pull Request(PR)——
B → A、A → Dev,然后优先合并A → Dev的PR
GitHub与CodeCommit的行为差异
GitHub 表现
当A合并到Dev且A被删除后:
- GitHub会自动把
B → A的PR的基础分支改成Dev - 逻辑通顺:此时
Dev已经包含了A的所有代码,合并B后Dev就同时拥有A和B的特性,符合预期
AWS CodeCommit 表现
当A合并到Dev且A被删除后:
- CodeCommit会直接关闭
B → A的PR,因为目标分支A已经不存在了 - 问题:最终
Dev里只有A的代码,B的特性无法合并进来
解决方案
方法1:手动修改PR目标分支
- 在
A被删除后,找到被自动关闭的B的PR - 编辑这个PR,把目标分支从已删除的
A改成Dev - 重新触发代码评审、CI检查,确认无冲突后合并即可
方法2:用Lambda自动调整PR目标分支
通过CodeCommit事件触发Lambda函数,自动完成PR分支的切换:
- 给CodeCommit仓库配置事件通知,监听
pullRequestClosed事件(当A → Dev的PR合并完成并删除A时,会触发该事件) - 编写Lambda函数,核心逻辑:
- 解析事件中的仓库ID、被删除的分支名称(即A)
- 调用CodeCommit的
listPullRequestsAPI,筛选出所有以A为目标分支的PR - 对这些PR调用
UpdatePullRequestTargetAPI,把目标分支改成Dev - 如果PR被自动关闭了,再调用
UpdatePullRequestStatus把状态改回OPEN
- 给Lambda配置对应的CodeCommit权限:
codecommit:ListPullRequests、codecommit:GetPullRequest、codecommit:UpdatePullRequestTarget、codecommit:UpdatePullRequestStatus
方法3:调整合并顺序(规避问题)
如果操作顺序可以调整,先合并B → A的PR,再合并A → Dev的PR,这样就不会出现分支被删除导致PR关闭的情况。但如果必须先合并A → Dev(比如要先验证A的特性),这个方法就不适用。
内容的提问来源于stack exchange,提问作者Zain Ul Abidin
相关产品推荐
相关产品推荐

