关于git rebase --onto操作后提交历史与文件状态的疑问
关于
git rebase --onto的工作逻辑 先把核心逻辑说清楚:git rebase --onto master next topic 这条命令的作用是,只把topic分支里那些「在next分支之后新增的提交」,移植到master分支的顶端。
对应你给出的示例场景:
next分支创建file.txt并生成提交A,基于next的HEAD建topic后,topic此时包含提交A以及next的所有历史提交。- 执行这条变基命令后,Git会先找出
topic和next的差异——也就是你在topic上单独做的、不属于next的提交,然后把这些提交一个个重新应用到master的最新提交上。
所以你的疑问答案是:
- 没错,
topic分支的提交历史里不会保留next上创建file.txt的那条提交,因为这条提交属于next,不在topic相对于next的新增提交范围内,不会被移植到master上。 - 但
file.txt不会自动留在topic里:如果topic本身没修改过file.txt,变基后topic的内容和master完全一致,不会有file.txt;如果topic修改过file.txt,那在应用修改提交时,Git会发现master里根本没有这个文件,直接触发冲突,得你手动解决。
总结一下:rebase --onto只会迁移你在topic上独立做的修改,不会带过来next分支的任何提交或文件——除非你在topic里改了这些文件,这时候Git会尝试把你的修改加上去,但基础环境(master)没原文件的话就会冲突。
内容的提问来源于stack exchange,提问作者sayshisnameisreal2222
相关产品推荐
相关产品推荐

