如何将development分支合并至master分支并忽略master分支中的指定提交?
更优雅的解决方案:使用
git rebase --onto重构提交历史 针对你的场景,最优雅的方式是通过git rebase --onto将development分支的提交重新定位到master分支中**未引入过时修改(D+E)**的提交节点上,之后直接快进合并master分支,既不会留下revert提交,也能得到干净的提交历史。
具体步骤(假设提交历史如下):
A -- B -- C -- D -- E (master) \ F -- G (development)
其中C是master分支在引入D、E之前的最后一个有效提交。
找到基准提交C的哈希值
运行git log master --oneline查看提交历史,记下C的哈希(比如abc123),或者用master~2直接指代(因为D、E是两个提交,master~2就是master往前数2个提交,刚好是C)。重新定位
development分支的提交
切换到development分支,执行rebase命令,把F、G两个提交重新应用到C上:git checkout development git rebase --onto abc123 master~2 # 或者用相对引用替代哈希:git rebase --onto master~2 master~2 development执行后,
development的提交历史会变成:A -- B -- C -- F' -- G' (development)(F'、G'是重新应用后的新提交,内容和原F、G一致)
快进合并到
master
切换回master分支,执行快进合并:git checkout master git merge development此时
master的提交历史会完全跳过D、E,变成干净的A--B--C--F'--G'。
和方案3的对比优势
- 没有多余的revert提交,提交历史更简洁直观;
- 直接重构提交链,避免后续分支管理中可能出现的revert相关冲突;
- 操作步骤更简洁,无需创建临时分支。
注意:如果
master分支是公共分支(已经推送到远程仓库且有其他开发者基于它工作),直接修改历史可能会影响他人,这种情况下方案3(revert后合并)会更安全。但如果master是你个人维护的分支,或者团队能接受修改历史,这个方案会更优雅。
内容的提问来源于stack exchange,提问作者Ernte1893
相关产品推荐
相关产品推荐

