GitHub Rebase & Merge生成新提交哈希,合并时如何保留原提交哈希?
解决方案
根本原因
你遇到的哈希变更问题是GitHub的Rebase & Merge机制导致的:该操作会强制将PR分支的所有提交在目标分支上重新生成一遍,即使你的promote分支已经可以直接快进合并到staging,也会因为提交元数据(父节点、生成时间等)变更产生新的哈希值。
可选实现方案
方案1:开启仓库快进合并选项(适配PR合并流程)
你可以在仓库配置中开启快进合并能力,走PR页面点击合并的流程也能保留原有提交哈希:
- 进入仓库的
Settings->Pull Requests配置页 - 在合并按钮配置区域,勾选Allow fast-forward merges选项
- 配置完成后,当PR的源分支(promote)和目标分支(staging)处于可直接快进的状态时,PR页面会出现
Fast-forward merge的合并选项 - 选择该选项合并,不会生成额外提交,也不会修改原有提交的哈希值
方案2:本地快进合并后推送(无需修改仓库配置)
如果不想修改仓库全局配置,可以在PR评审通过后,本地执行操作完成合并,PR的评审记录仍会保留:
# 切换到本地staging分支,拉取最新远端代码 git checkout staging git pull origin staging # 执行快进合并,确保没有额外合并提交生成 git merge --ff-only origin/promote # 推送合并后的staging到远端 git push origin staging
操作完成后手动关闭对应的PR即可,所有提交的原有哈希会完全保留。
验证
合并完成后执行git log --pretty=oneline staging,可以看到mod1、mod2、mod3的提交哈希和master分支上的原始哈希完全一致。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

