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

如何调整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


解决方案

有两种简洁的方式可以实现目标:

方式一:交互式变基

  1. 切换到feat-b分支:
git checkout feat-b
  1. 启动交互式变基,目标指向feat-a分支(此时feat-a已指向commit-Z):
git rebase -i feat-a
  1. 在弹出的编辑界面中,找到对应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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:50:24