Git分支B基于已变基的分支A重订时为何显示旧提交?
Git变基分支B时显示旧提交列表的原因
核心原因
Git的提交是不可变对象,你对分支A做rebase并合并提交的操作,本质是生成了一条全新的提交链——旧的分支A提交并没有被删除,只是不再被分支A指向。而分支B是基于变基前的旧A创建的,它的提交历史根节点还是旧A的最后一个提交。
当你尝试把B变基到新A时,Git会自动寻找B和新A的最近共同祖先。但新A的提交链是从develop重新生成的,和旧A的提交链完全没有交集,Git会误以为旧A到B的所有提交都还没被合并到新A里,所以就把这些提交都列出来了。
解决办法
- 精准指定移植范围(推荐)
用--onto参数明确告诉Git要移植的提交范围:
这条命令的作用是:把分支B中,旧A之后的所有提交,移植到新A的顶端,这样就只会显示B独有的提交。git rebase --onto <新A的SHA1> <旧A的SHA1> B - 交互式变基手动清理
执行git rebase -i A进入交互式编辑界面,把那些已经被合并到新A里的旧提交标记为drop,只保留B新增的提交即可。
内容的提问来源于stack exchange,提问作者Oodini
相关产品推荐
相关产品推荐

