如何使用git reset --soft保留Git分支合并工作流?
问题解决方案
修复分支合并记录被破坏的问题
你当前使用git reset --soft "HEAD~2"会回退到两个提交之前,把PR提交和更早的分支合并记录都纳入回退范围,这才导致代表分支合并的工作流斜线被破坏。正确的做法是只回退到PR提交的节点(即自动版本更新提交的前一个节点),操作代码调整如下:
- name: 合并版本更新变更到PR提交 run: | git config user.name github-actions git config user.email github-actions@github.com # 仅回退到PR提交节点,保留版本更新的变更内容 git reset --soft HEAD~1 # 后续处理提交信息,参考下方合并提交信息的方法 git commit --amend --no-edit --message="Version ${{ env.MYVERSION }}" git push --force
这样只会合并最近的两个目标提交(PR提交和自动版本更新提交),不会触动更早的分支合并记录,也就不会破坏工作流的合并斜线。
合并两个提交的信息
如果需要同时保留PR的原始提交信息和版本更新的内容,有两种实用方式:
方式1:拼接原始PR信息与版本信息
直接读取PR提交的原始信息,再和版本信息拼接后提交:
# 提取PR提交的原始信息 original_pr_msg=$(git log --format=%B -n1 HEAD~1) # 合并信息并提交 git commit --amend --message="$original_pr_msg Version ${{ env.MYVERSION }}"
方式2:保留原始PR信息,追加版本备注
用--no-edit参数保留PR的原始提交信息,同时追加版本更新内容:
git commit --amend --no-edit --message="Version ${{ env.MYVERSION }}"
最终提交信息会保留PR的原始内容,末尾自动添加版本更新的备注行。
额外注意
- 执行
git push --force前,要确认当前分支只有这两个需要合并的提交,避免误覆盖其他未同步的变更。 - 如果你的PR提交本身是合并提交(比如从其他分支合并而来),需要把
HEAD~1替换为HEAD^1,确保回退到PR合并提交本身,避免回退到错误节点。
内容的提问来源于stack exchange,提问作者Nick Delbar
相关产品推荐
相关产品推荐

