GitHub Action绑定release触发时执行git push出现detached HEAD错误如何解决
错误原因
当工作流由release: [created]事件触发时,actions/checkout默认会拉取你创建Release时选中的标签对应的提交快照,而非默认分支的最新代码,此时git处于*detached HEAD(游离头)*状态,没有绑定任何本地分支,直接执行git push时git无法确定要推送的目标远程分支,就会抛出你遇到的报错。
修复方案
你可以按以下步骤调整配置即可解决问题:
- 给checkout步骤指定拉取的目标分支,建议直接使用GitHub Release事件内置的
target_commitish变量,动态读取你创建Release时选择的目标分支,不需要写死分支名 - 给工作流配置代码写入权限,避免默认的GITHUB_TOKEN没有推送权限
- push时明确指定目标分支,避免歧义
调整后的完整工作流配置如下:
name: Publish package to GitHub Repository on: release: types: [created] # 配置GITHUB_TOKEN的权限,允许推送代码到仓库 permissions: contents: write packages: write # 推送到GitHub Packages需要该权限,不需要可删除 jobs: publish: runs-on: ubuntu-latest steps: - name: Check out Git repository uses: actions/checkout@v2 with: fetch-depth: '0' # 动态读取创建Release时选择的目标分支,而非拉取标签对应的游离提交 ref: ${{ github.event.release.target_commitish }} - name: Install Java and Maven uses: actions/setup-java@v1 with: java-version: 11 - name: Update version in pom.xml (Release only) run: mvn -B versions:set -DnewVersion=${{ github.event.release.tag_name }} -DgenerateBackupPoms=false - name: Commit and push changes to pom. run: | git config --global user.name "GitHub Actions" git config --global user.email "no-reply@example.com" git add pom.xml git commit -m "Bumped version to ${{ github.event.release.tag_name }}" # 明确指定推送到对应的目标分支 git push origin ${{ github.event.release.target_commitish }} - name: Deploy to Github Package Registry env: GITHUB_USERNAME: ${{ github.actor }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: mvn --settings settings.xml --file pom.xml deploy
如果你确定所有Release都是基于默认分支创建的,也可以直接把上面的${{ github.event.release.target_commitish }}替换成你的默认分支名(比如main/master)即可。
内容的提问来源于stack exchange,提问作者Rob Audenaerde
相关产品推荐
相关产品推荐

