为什么git rebase --onto操作仅拾取2个提交而非预期的5个?
原因核心来自git rebase --onto三参数的语义规则
你执行的命令格式为 git rebase --onto <newbase> <upstream> <branch>,执行逻辑有明确的固定规则:
- 第一步会先圈定要移植的提交范围:所有是
<branch>的祖先、但不是<upstream>的祖先的提交,等价于Git提交范围语法<upstream>..<branch>,这个范围不包含<upstream>本身,也不包含<upstream>的所有祖先提交 - 第二步把圈定的提交按顺序逐个移植到
<newbase>的顶端 - 最后将
<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
相关产品推荐
相关产品推荐

