在GitHub Actions中执行Git rebase操作时出现合并冲突如何解决
问题原因
冲突的核心原因有两个:
- 你触发工作流的提交之后,分支上有其他新提交也修改了
metrics.json,重放提交时Git无法自动合并内容。 - 你之前用的
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
相关产品推荐
相关产品推荐

