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

如何获取DEV合并到MAIN分支的提交信息以写入发布内容?

如何获取DEV合并到MAIN分支的提交信息以写入发布内容?

嘿,我明白你想抓取DEV合并到MAIN时的那个合并提交消息,用来填充发布内容对吧?之前用get-commits没成功,那咱们换个更直接可控的思路,试试用Git命令结合GitHub Actions来实现:

核心思路

当你把DEV分支合并到MAIN分支时,MAIN上会生成一个合并提交(就是你截图里显示的那种带有两个父提交的记录)。我们可以通过Git命令识别出这个合并提交,然后提取它的完整消息,再传递给后续生成发布内容的步骤。

修改你的Workflow YAML

我帮你调整了原有的配置,添加了提取合并提交消息的步骤,你可以参考下面的完整配置:

name: "Build Android app"

on:
  push:
    branches: ['main', 'dev']

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 📂 Checkout repository
        uses: actions/checkout@v4  # 建议升级到最新版本,兼容性更好
        with:
          fetch-depth: 0  # 必须设置这个,才能拉取完整的提交历史,否则无法检测合并提交

      - name: 提取合并提交消息
        id: get_merge_msg
        run: |
          # 检查当前提交是否是合并提交(合并提交有两个父提交)
          if git rev-parse --verify HEAD^2 >/dev/null 2>&1; then
            # 提取当前合并提交的完整消息(包括标题和正文)
            MERGE_MSG=$(git log --format=%B -n 1 HEAD)
            # 把消息存入GitHub Actions输出变量,方便后续步骤调用
            echo "merge_message<<EOF" >> $GITHUB_OUTPUT
            echo "$MERGE_MSG" >> $GITHUB_OUTPUT
            echo "EOF" >> $GITHUB_OUTPUT
            echo "✅ 检测到合并提交,已提取消息"
          else
            echo "ℹ️ 当前提交不是合并提交,跳过消息提取"
            echo "merge_message=" >> $GITHUB_OUTPUT
          fi

      - name: ☕ 安装Java
        uses: actions/setup-java@v3
        with:
          java-version: 17
          distribution: adopt
          cache: gradle

      - name: 🔍 验证Gradle
        uses: gradle/wrapper-validation-action@v1

      - name: 🖥️ 安装Node  
        uses: actions/setup-node@v3
        with:
          node-version: 18  # 这里补充完整你的Node版本号,比如18.x
          cache: 'npm'  # 可选,开启npm依赖缓存加速构建

      # 示例:后续步骤中使用提取到的合并消息
      - name: 测试输出合并消息
        if: steps.get_merge_msg.outputs.merge_message != ''
        run: |
          echo "合并提交消息内容:"
          echo "${{ steps.get_merge_msg.outputs.merge_message }}"
          # 这里可以替换成你写入发布内容的逻辑,比如调用create-release Action时,把body设为这个变量

关键细节说明

  1. fetch-depth: 0:默认情况下,actions/checkout只会拉取最新的1条提交记录,这样无法检测合并提交的父提交,所以必须设置这个参数拉取完整历史。
  2. 合并提交检测:git rev-parse --verify HEAD^2命令会尝试获取当前提交的第二个父提交,如果成功,就说明这是一个合并提交。
  3. 消息提取:git log --format=%B -n 1 HEAD会输出当前提交的完整消息(包括换行和正文),适合直接用作发布内容的主体。
  4. 变量传递:通过$GITHUB_OUTPUT把消息存入输出变量后,后续步骤可以用${{ steps.get_merge_msg.outputs.merge_message }}来引用这个消息,比如在创建Release的时候,把body字段设为这个变量即可。

之前你用的get-commits Action可能是默认获取了push的所有提交列表,而没有单独提取合并提交本身的消息,所以直接用Git命令会更精准哦~

备注:内容来源于stack exchange,提问作者Nilton Schumacher F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 15:04:35