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

为什么git rebase --onto操作仅拾取2个提交而非预期的5个?

原因核心来自git rebase --onto三参数的语义规则

你执行的命令格式为 git rebase --onto <newbase> <upstream> <branch>,执行逻辑有明确的固定规则:

  1. 第一步会先圈定要移植的提交范围:所有是<branch>的祖先、但不是<upstream>的祖先的提交,等价于Git提交范围语法 <upstream>..<branch>,这个范围不包含<upstream>本身,也不包含<upstream>的所有祖先提交
  2. 第二步把圈定的提交按顺序逐个移植到<newbase>的顶端
  3. 最后将<branch>分支指针移动到移植后的最新提交位置

结合你的提交链路来看:
issue-555分支指向G提交,E、F、G都属于<upstream>(也就是issue-555)的祖先链路,会被直接排除在移植范围之外;只有H、I是rebase-complex的祖先,且不属于issue-555的祖先链路,因此最终只有这两个提交被移植到your-master分支上。

如果你希望把E、F、G、H、I全部移植到your-master,只需要把上游截断点调整为E的父提交(也就是提交A),命令改为 git rebase --onto your-master A rebase-complex即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:57:03