如何使用git rebase --onto将分支变基到squash合并后的main分支?
解答
git rebase --onto的标准参数规则为:
git rebase --onto <新目标基底> <需剔除的提交链末端> [待变基分支]
- 新目标基底:你要把提交链接到的位置,你的场景里就是
origin/main(对应提交I),这个参数你已经填写正确。 - 需剔除的提交链末端:也就是你不想带到新分支上的那段提交的最后一个节点,你的场景里要剔除D、E、H三个提交,它们的末端就是提交H。
- 如果你本地还保留
branch-A分支(该分支的指针正好指向提交H),这里直接填branch-A即可。 - 如果
branch-A已经被删除,可以先执行git log --oneline branch-B查看提交历史,找到J提交的父提交(也就是H)的哈希值填入即可。
- 如果你本地还保留
- 待变基分支:可选参数,如果你已经提前
git checkout branch-B切到了工作分支,这个参数可以省略,Git会默认取当前HEAD指向的branch-B最新提交作为范围终点。
操作提示:执行变基前可以先运行
git branch branch-B-backup创建备份分支,若变基结果不符合预期,切回备份分支即可恢复原始状态,无操作风险。
对应你的场景,切到branch-B后直接执行以下命令即可得到预期的提交结构:
# 本地保留branch-A的情况 git rebase --onto origin/main branch-A # branch-A已删除,替换为H的实际提交哈希即可,示例哈希为a1b2c3d git rebase --onto origin/main a1b2c3d
执行完成后可以用git log --oneline --graph origin/main branch-B验证提交结构,确认J、K两个提交已经正确挂在提交I之后,D/E/H三个提交被剔除即可。
内容的提问来源于stack exchange,提问作者Nainpo
相关产品推荐
相关产品推荐

