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

GitHub Actions升级npm版本打标签遇分支误删及分支选择问题

问题分析与解决

一、develop分支被误删的原因及修复

你的Push Tag步骤使用了错误的Git推送命令:

git push origin ${{ steps.get_tag.outputs.TAG }}:develop

这个命令的语法是git push <远程仓库> <本地引用>:<远程引用>,你把标签对应的提交推送到了远程develop分支,相当于强制将远程develop分支重置为该标签指向的历史节点。如果该标签的提交早于当前develop的最新提交,远程develop分支的后续提交会被覆盖,视觉上就会呈现出分支被"删除"的效果。

修复操作:

  1. 移除冗余的打标签步骤:npm version命令会自动根据升级后的版本号创建对应的Git标签,不需要再手动执行git tag命令,这一步属于重复操作。
  2. 修正推送标签的命令:推送标签的正确方式是直接推送标签名称,而非映射到分支:
git push origin ${{ steps.get_tag.outputs.TAG }}

或者更简洁的方式,直接推送所有新生成的标签:

git push origin --tags
  1. 补充推送版本更新的提交:npm version不仅会创建标签,还会自动生成一个修改package.json等文件的版本更新提交,需要将这个提交推送到对应分支(注意:PR触发的工作流中推送代码需要确保Actions有对应权限)。

二、版本升级与标签创建的分支选择

优先选main分支的场景:

  • 遵循Git Flow工作流:main分支作为生产就绪分支,版本标签应该对应生产环境的发布版本,每次从develop合并到main后执行版本升级和打标签,能确保标签与生产代码完全一致。
  • 强调版本稳定性:标签代表可发布的稳定版本,main分支的代码经过充分测试,适合作为版本标记的基准。

可选develop分支的场景:

  • 需要标记开发阶段版本:如果团队需要跟踪开发分支的迭代版本(比如内部测试版),可以在develop分支打标签,但这类标签建议带上-beta/-rc等后缀,和正式版本区分开。
  • 小型团队或简化工作流:如果团队没有严格的分支规范,直接在develop分支迭代并打标签,适合快速迭代的小项目。

最佳实践建议:

如果项目遵循标准Git Flow,优先在main分支执行版本升级和打标签:

  • 当develop分支功能开发完成,合并到main分支时触发工作流。
  • 在main分支完成版本升级、打标签,并推送标签和版本提交。
  • develop分支仅用于日常开发,不打正式版本标签。

修正后的完整工作流代码

name: Prettier, Semantic Versioning, and Tagging
on:
  pull_request:
    types: [opened, reopened, synchronize]
    branches:
      - develop

jobs:
  update-version:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: ${{ github.head_ref }}

      - name: Set Git User Identity
        run: |
          git config --global user.email "${{ secrets.GIT_USER_EMAIL }}"
          git config --global user.name "${{ secrets.GIT_USER_NAME }}"

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: "20"

      - name: Pretty checking & auto formatting
        run: |
          echo "executing prettier commands."
          npm ci
          npm run prettier:check
          npm run prettier:format
          git add .
          git commit -m "chore: auto format code with prettier" || echo "No changes to commit"

      - name: Determine Version Increment Level
        id: determine-version-level
        run: |
          commit_message=$(git log --format=%B -n 1)
          echo "commit_message...: $commit_message"
          if [[ $commit_message == *"breaking changes:"* || $commit_message == *"breaking change:"* || $commit_message == *"BREAKING CHANGE:"* ]]; then
            echo "version-level=major" >> $GITHUB_OUTPUT
          elif [[ $commit_message == *"feat:"* || $commit_message == *"feature:"* ]]; then
            echo "version-level=minor" >> $GITHUB_OUTPUT
          else
            echo "version-level=patch" >> $GITHUB_OUTPUT
          fi

      - name: Update Version Numbers using npm
        run: |
          version_level=${{ steps.determine-version-level.outputs.version-level }}
          echo "Version Level...: $version_level"
          npm version $version_level --force

      - name: Push Version Commit and Tag
        run: |
          git push origin ${{ github.head_ref }}
          git push origin --tags

注意:在PR触发的工作流中推送代码到PR分支,需要确保GitHub Actions拥有仓库的读写权限(可在仓库设置的Actions权限中开启)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:44:52