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

如何合并部分提交为合并提交后重放剩余提交到Git分支?

实现目标提交结构的操作步骤

理想情况:添加与origin/main的合并提交

你的目标是在origin/feature_branch的X提交后,添加一个合并origin/main(包含提交C)的提交,再应用Y、Z的修改,操作如下:

  1. 创建本地分支追踪origin/feature_branch(已有本地分支可跳过)
git checkout -b feature_branch_target origin/feature_branch
  1. 合并origin/main并创建非快进合并提交(这就是你需要的合并节点)
git merge origin/main --no-ff

执行后会打开编辑器让你编辑合并提交信息,确认后即可生成合并节点。

  1. 将原feature_branch上的Y'、Z'提交(对应原Y、Z的修改)应用到当前分支
# 替换<X-hash>为origin/feature_branch最后一个提交X的哈希值
git cherry-pick <X-hash>..feature_branch

或者直接指定Y'和Z'的哈希值:

git cherry-pick <Y'-hash> <Z'-hash>

完成后,分支结构将变为:

A - B - C (origin/main)
    \     \
     V - W - X - Merge origin/main (合并提交) - Y'' - Z'' (feature_branch_target)

备选方案:将V'、W'、X' squash为单个提交

若你更倾向于将变基后的V'、W'、X'压缩为单个提交再添加到X之后,操作如下:

  1. 切换到变基后的feature_branch
git checkout feature_branch
  1. 交互式变基,将V'、W'、X'压缩为单个提交
# HEAD~4指向V'的父提交(即C),需根据实际提交数量调整数字
git rebase -i HEAD~4

在弹出的交互编辑器中,将W'、X'对应的pick改为squash(或s),仅保留V'的pick,保存退出后编辑新的提交信息,完成后feature_branch将变为C -> V''(压缩后的提交) -> Y' -> Z'。

  1. 切换到追踪origin/feature_branch的本地分支
git checkout feature_branch_target
  1. 依次应用压缩后的提交以及Y'、Z'
# 替换<V''-hash>为压缩后的提交哈希
git cherry-pick <V''-hash>
git cherry-pick <Y'-hash> <Z'-hash>

完成后,分支结构将变为:

A - B - C (origin/main)
    \
     V - W - X - V''(V'、W'、X'的压缩提交) - Y'' - Z'' (feature_branch_target)

内容的提问来源于stack exchange,提问作者g_raham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:05:32