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

在GitHub Actions中执行Git rebase操作时出现合并冲突如何解决

问题原因

冲突的核心原因有两个:

  1. 你触发工作流的提交之后,分支上有其他新提交也修改了metrics.json,重放提交时Git无法自动合并内容。
  2. 你之前用的git checkout --ours逻辑错误:rebase过程中ours指代的是rebase的目标基底(也就是拉取到的最新远程分支代码),并不是你本次工作流生成的新结果,也不是你要修改的原始提交内容。
解决方案

直接替换你的Commit Results步骤的运行脚本即可:

- name: Commit Results
  run: |
    git config --local user.email "action@github.com"
    git config --local user.name "GitHub Action"

    CIREVISION=$(git rev-parse HEAD)
    # 暂存本次计算生成的所有变更
    git add .
    git stash push -m "ci-calculated-results"

    # 拉取远程最新变更
    git pull --rebase origin $GITHUB_REF_NAME

    # 定位到需要修改的原始提交,标记为编辑状态
    GIT_SEQUENCE_EDITOR="sed -i '1s/pick/edit/'" git rebase -i "$CIREVISION^"

    # 应用计算结果,冲突时直接用我们新生成的文件覆盖,不做合并
    git stash pop || true
    git checkout stash@{0} -- .
    git stash drop

    # 把结果追加到原始提交
    git add .
    git commit --amend --no-edit

    # 继续rebase,后续所有冲突优先保留我们修改后的提交内容
    git rebase --continue -X ours

    git push --force origin $GITHUB_REF_NAME
逻辑说明
  • 脚本会先把本次工作流生成的所有计算结果单独存为stash补丁,避免被后续rebase操作覆盖。
  • 冲突时直接用stash里的本次最新计算结果覆盖对应文件,不需要合并两个旧版本的内容,完全符合你要把最新指标和原始参数绑定的需求。
  • git rebase --continue -X ours指定了后续重放其他提交时,所有冲突都优先保留我们已经修改好的原始提交的内容,不会再触发冲突中断流程。
  • 如果你需要优先保留其他提交对指标文件的修改,把-X ours改为-X theirs即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:45:08