分支被误合并后,如何重放未纳入MR的提交至新分支?
批量迁移提交到新分支的高效方法
不用手动逐个cherry-pick,可以用*git rebase --onto*命令一次性完成提交重放,步骤如下:
拉取远程最新状态,确保本地能获取到扁平化后的
origin/A和最新的master:git fetch origin基于最新的
master创建新分支(用于后续提交新MR):git checkout -b new-A origin/master把本地分支
A中,所有在origin/A之后的提交,批量重放到新分支new-A上:git rebase --onto new-A origin/A A这个命令的逻辑是:提取
A分支里从origin/A之后的所有提交,将它们依次应用到new-A分支的顶端,自动保持提交顺序。处理可能出现的冲突:
- 遇到冲突时,Git会暂停操作,手动修改冲突文件的内容
- 解决冲突后执行
git add <冲突文件>,然后继续完成重放:git rebase --continue - 如果某提交无需保留,可执行
git rebase --skip跳过该提交
完成后,
A分支的提交已基于master重新排列,你可以选择直接推送该分支作为新MR,或者推送new-A分支到远程:# 推送A分支为新的MR分支(若原远程A分支状态混乱,建议用新名称) git push origin A:fresh-A-branch # 或者直接推送new-A分支 git push origin new-A
替代方案:批量cherry-pick
如果更熟悉cherry-pick的逻辑,也可以用批量命令一次性迁移所有目标提交:
git cherry-pick origin/A..A
执行前确保当前处于基于master创建的新分支上,命令会把origin/A到A之间的所有提交按顺序应用到当前分支,冲突处理方式与rebase一致。
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

