如何调整feat-b分支历史:用提交Z替换提交X并保留提交Y?
Git分支历史调整方案
问题场景
我在feat-a分支开发功能A,完成后提交到commit-X,推送到远程并创建PR等待评审。随后切换到feat-b分支开发依赖功能A的功能B,先执行git rebase feat-a将feat-b变基到feat-a,接着开发并提交了变更到commit-Y。
评审时发现代码存在小问题(比如缺少文档),于是我在feat-a分支用git commit --amend修改了commit-X,生成新的commit-Z替代原提交。
当前分支历史:
- main分支:
common-ancestor-commit→commit-Z - feat-b分支:
common-ancestor-commit→commit-X→commit-Y
需要将feat-b的历史调整为:common-ancestor-commit → commit-Z → commit-Y
解决方案
有两种简洁的方式可以实现目标:
方式一:交互式变基
- 切换到
feat-b分支:
git checkout feat-b
- 启动交互式变基,目标指向
feat-a分支(此时feat-a已指向commit-Z):
git rebase -i feat-a
- 在弹出的编辑界面中,找到对应
commit-X的行,将开头的pick替换为drop,保存并退出。这一步会丢弃旧的commit-X,让commit-Y直接衔接在commit-Z之后。
方式二:直接重定向变基(更高效)
直接执行以下命令,将commit-X之后的提交(仅commit-Y)移动到feat-a分支(commit-Z)的末尾:
git checkout feat-b git rebase --onto feat-a commit-X
注意事项
如果feat-b已经推送到远程仓库,变基后需要强制推送更新分支历史:
git push --force-with-lease origin feat-b
使用--force-with-lease比--force更安全,能避免意外覆盖其他开发者对该分支的修改。
内容的提问来源于stack exchange,提问作者sev
相关产品推荐
相关产品推荐

