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

如何将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之前的最后一个有效提交。

  1. 找到基准提交C的哈希值
    运行git log master --oneline查看提交历史,记下C的哈希(比如abc123),或者用master~2直接指代(因为D、E是两个提交,master~2就是master往前数2个提交,刚好是C)。

  2. 重新定位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一致)

  3. 快进合并到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:53:15