如何获取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设为这个变量
关键细节说明
fetch-depth: 0:默认情况下,actions/checkout只会拉取最新的1条提交记录,这样无法检测合并提交的父提交,所以必须设置这个参数拉取完整历史。- 合并提交检测:
git rev-parse --verify HEAD^2命令会尝试获取当前提交的第二个父提交,如果成功,就说明这是一个合并提交。 - 消息提取:
git log --format=%B -n 1 HEAD会输出当前提交的完整消息(包括换行和正文),适合直接用作发布内容的主体。 - 变量传递:通过
$GITHUB_OUTPUT把消息存入输出变量后,后续步骤可以用${{ steps.get_merge_msg.outputs.merge_message }}来引用这个消息,比如在创建Release的时候,把body字段设为这个变量即可。
之前你用的get-commits Action可能是默认获取了push的所有提交列表,而没有单独提取合并提交本身的消息,所以直接用Git命令会更精准哦~
备注:内容来源于stack exchange,提问作者Nilton Schumacher F
相关产品推荐
相关产品推荐

