【问题标题】:Git fast forward not working in Github Actions/WorkflowsGit 快进在 Github 操作/工作流中不起作用
【发布时间】:2021-07-25 21:32:36
【问题描述】:

我有一个工作流程,我在使用 Github Actions 推送 prod 分支时自动将 prod 分支合并到 master 分支

用于 github 操作的 Yml 文件

name: Merge Prod -> master

on:
  push:
    branches: [ prod ]
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Merge prod->master ff_only
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          git config user.name "test"
          git config user.email "test@test.com"
          git fetch origin master
          git fetch origin prod
          git checkout master
          git pull --rebase
          git merge prod --ff-only --allow-unrelated-histories
          git push origin master

日志:

Run git config user.name "test"
  git config user.name "test"
  git config user.email "test@test.com"
  git fetch origin master
  git fetch origin prod
  git checkout master
  git pull --rebase
  git merge prod --ff-only --allow-unrelated-histories
  git push origin master
  shell: /usr/bin/bash -e {0}
  env:
    GITHUB_TOKEN: ***
From https://github.com/luvk1412/demo
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> origin/master
From https://github.com/luvk1412/demo
 * branch            prod       -> FETCH_HEAD
Switched to a new branch 'master'
Branch 'master' set up to track remote branch 'master' from 'origin'.
From https://github.com/luvk1412/demo
Already up to date.
 * [new branch]      f2          -> origin/f2
 * [new branch]      f3          -> origin/f3
 * [new branch]      test_branch -> origin/test_branch
fatal: Not possible to fast-forward, aborting.
Error: Process completed with exit code 128.

提交示例:https://github.com/luvk1412/demo/commit/790d824111d0c0c5b28157b9108e7b97b6b6cdc8

通过 PR 生成的提交:https://github.com/luvk1412/demo/pull/38

测试分支:https://github.com/luvk1412/demo

PR 合并到 prod 后,我的 prod 分支完全包含 master 分支和一个额外的提交(由于 PR),因此满足快进条件并且快进应该可以工作,我不确定我在这里缺少什么。 快进适用于我的本地(如果我不自动执行此操作并通过本地手动执行)

【问题讨论】:

  • 旁注:--ff-only--allow-unrelated-histories 组合起来毫无意义。如果您想要快进合并,请忽略 --allow-unrelated-histories。额外的选项没有有害,只是无稽之谈。
  • @torek 实际上,当我写这篇文章时,我遇到了一个无关历史的错误,当时我没有使用 --ff-only 并且只是在添加 --ff-only 后没有删除它,我明白你在说什么

标签: git github github-actions


【解决方案1】:

虽然我没用过这些,但我怀疑this是罪魁祸首:

对于触发工作流的 ref/SHA,默认情况下只获取一个提交。设置 fetch-depth: 0 以获取所有分支和标签的所有历史记录。 请参阅此处了解 $GITHUB_SHA 指向不同事件的提交。

(我的粗体字)。对于单次提交,Git 无法判断合并是否是快进;对于单个分支,Git 没有必要的分支名称。您运行的额外提取将修复一些这些问题,但还不够。按照这里前面的建议设置提取深度可以解决问题。

【讨论】:

    【解决方案2】:

    使用 checkout@V1 的脚本有效

    name: Auto Merge prod->master
    on:
      push:
        branches: [ prod ]
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - name: Checkout
          uses: actions/checkout@v1
    
        - name: Merge prod->master
          env:
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          run: |
            git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/<github_user_name>/<repo_name>
            git config user.name "test"
            git config user.email "test@test.com"
            git fetch origin master
            git checkout -b master origin/master
            git merge origin/prod --ff-only
            git push origin master
    

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 2022-08-23
      • 2020-03-15
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 2020-05-05
      • 2021-04-14
      相关资源
      最近更新 更多