You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Fastlane合并分支至main后获取被合并分支的名称?

解决Fastlane合并PR后获取原分支名的问题

当PR合并到main分支后,当前分支已是main,git_branch自然拿不到原分支名,你可以通过以下几种方式解决:

方法1:解析合并提交信息

PR合并后会生成一条包含源分支信息的合并提交(比如Merge pull request #XXX from ABC-123),直接解析这条提交的内容提取分支名:

lane :jiraNotify do
  # 获取最近一次合并提交的完整信息
  merge_commit_msg = sh("git log --merges -1 --pretty=format:%B", log: false).strip
  # 匹配"from 分支名"的格式,提取分支
  if merge_commit_msg.match?(/from (\S+)/)
    source_branch = $1
    if source_branch.include?("ABC")
      # 执行你的发布逻辑
      puts "待处理工单分支:#{source_branch}"
    end
  else
    puts "未找到有效合并提交"
  end
end

方法2:利用CI平台的环境变量

如果你的Fastlane工作流在CI(如GitHub Actions、GitLab CI)中运行,大部分CI平台会直接提供PR源分支的环境变量,无需解析git日志:

lane :jiraNotify do
  # 适配不同CI平台的环境变量
  source_branch = ENV["GITHUB_HEAD_REF"] || ENV["CI_MERGE_REQUEST_SOURCE_BRANCH_NAME"] || ""
  
  if !source_branch.empty? && source_branch.include?("ABC")
    # 执行你的发布逻辑
    puts "待处理工单分支:#{source_branch}"
  else
    # 环境变量不存在时,回退到解析合并提交的方法
    merge_commit_msg = sh("git log --merges -1 --pretty=format:%B", log: false).strip
    if merge_commit_msg.match?(/from (\S+)/)
      source_branch = $1
      if source_branch.include?("ABC")
        puts "待处理工单分支:#{source_branch}"
      end
    else
      puts "无法获取源分支信息"
    end
  end
end

方法3:通过Git父提交查找源分支

合并提交有两个父节点,第二个父节点对应源分支的最后一次提交,通过Git命令可以反向查到分支名:

lane :jiraNotify do
  # 获取最近合并提交的第二个父提交哈希
  parent_hashes = sh("git log --merges -1 --pretty=format:%P", log: false).split
  return if parent_hashes.size < 2
  
  # 根据父提交哈希查找对应的分支名
  source_branch = sh("git name-rev --name-only #{parent_hashes[1]}", log: false).strip
  # 去除可能的~后缀(如ABC-123~1)
  source_branch = source_branch.split("~").first
  
  if source_branch.include?("ABC")
    # 执行你的发布逻辑
    puts "待处理工单分支:#{source_branch}"
  else
    puts "无法识别工单分支格式"
  end
end

内容的提问来源于stack exchange,提问作者Adrian Coman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:15:36