如何在GitHub Actions中将构建产物推送到同一仓库的其他分支?
GitHub Actions 推送文件至另一个分支失败问题解决
我需要在develop分支构建文件,然后通过GitHub Actions把新生成和更新的文件推送到同一仓库的staging分支。但用下面的配置时,commit to staging branch步骤总是失败。
原配置:
name: Deployment on: push: branches: [ develop ] pull_request: branches: [ develop ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build files and folders run: | ./build.sh rm -rf cache mkdir logs cd logs ls>output.txt - name: commit to staging run: | git checkout staging git add * git commit -m "new push to staging" git push
错误信息(翻译后):
/home/runner/work/_temp/c305681-ab7e-42f8-b39c-8ef35264cff.sh: 第1行: github: 未找到命令 错误: 进程以退出码 127 完成
问题原因
出现这个错误主要是几个配置遗漏:
- 默认
actions/checkout@v3只拉取当前分支,没有获取staging分支的历史,直接切换会失败; - 没有配置Git的用户名和邮箱,导致无法提交;
- 推送时缺少必要的权限,且未处理分支不存在的情况。
修正后的配置
name: 部署 on: push: branches: [ develop ] pull_request: branches: [ develop ] jobs: build: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v3 with: fetch-depth: 0 # 拉取所有分支历史,保证能切换到staging ref: develop # 指定检出develop分支 - name: 构建文件和文件夹 run: | ./build.sh rm -rf cache mkdir logs cd logs ls > output.txt - name: 配置Git身份信息 run: | git config --global user.name "GitHub Actions" git config --global user.email "actions@github.com" - name: 切换分支并推送更新 run: | # 如果staging分支不存在则创建 git checkout staging || git checkout -b staging # 添加所有变更文件(比*更稳妥,能包含隐藏文件) git add . # 检查是否有实际变更,避免空提交报错 if git diff --staged --quiet; then echo "无文件变更,无需提交" else git commit -m "从develop分支构建后推送至staging" git push origin staging fi
关键修改说明
- 给
actions/checkout添加fetch-depth: 0,确保拉取仓库所有分支的完整历史,这样才能顺利切换到staging分支; - 增加Git身份配置步骤,解决提交时的身份验证问题;
- 优化分支切换逻辑,自动处理staging分支不存在的情况;
- 添加空提交检查,避免没有文件变更时触发错误;
- 推送时明确指定
origin staging,避免默认分支混淆。
内容的提问来源于stack exchange,提问作者Eka
相关产品推荐
相关产品推荐

