Git变基分支单个提交时是否会带入该分支此前其他提交的变更?
Git变基操作变更范围问题解答
结论
变基完成后,main分支不会出现D、E、H三个提交引入的变更。
原理说明
- 你使用的
git rebase --onto G H I命令中,实际要变基的提交范围是H..I,也就是仅包含提交I本身(Git 中X..Y语法代表所有可从Y访问到、但无法从X访问到的提交) - 虽然每个Git提交确实存储文件的完整快照,但变基操作不会直接复制I的快照到G之后:Git会先计算I相对于它的父提交H的变更差量(diff),再把这个差量应用到目标基提交G上,生成一个全新的提交I'
- 这个差量只包含I本身做的改动,完全不涉及D、E、H的修改内容,因此新生成的I'不会携带这三个提交的变更。如果I的改动和G的内容存在冲突,仅需要针对冲突部分手动处理,不会默认带入D、E、H的全部变更。
举个实际场景辅助理解:
假设G提交的目录下仅存在main.md文件;D提交新增a.md,E提交新增b.md,H提交新增c.md,I提交新增d.md。
变基完成后生成的I'提交,只会在G的基础上新增d.md,不会出现a.md、b.md、c.md三个来自D、E、H的文件。
内容的提问来源于stack exchange,提问作者Jaxx
相关产品推荐
相关产品推荐

