如何将topicB变基至topicA的基础提交且排除继承自topicA的变更?
如何将topicB变基到development的共同起点(排除topicA的变更)
你尝试的命令方向其实是正确的,之所以觉得变更没保留,大概率是变基过程中的冲突没处理完成,或者没正确验证最终的分支结构。下面是完整的操作步骤和细节说明:
核心命令与解释
你需要的命令本质上就是你试过的这个,只是可以简化写法(如果当前在topicB分支上):
# 先切换到topicB分支 git checkout topicB # 执行变基:将topicB中不属于topicA的提交,移到development的顶端 git rebase --onto development topicA
或者你也可以直接指定分支,不用切换:
git rebase --onto development topicA topicB
这个命令的具体含义:
--onto development:告诉Git把目标提交(topicB独有的提交)放到development分支的当前顶端(也就是你想要的那个共同起点)topicA:作为"上游边界",表示只保留topicB中比topicA新的提交(也就是topicB自己的3个提交,排除从topicA继承的所有变更)- 最后一个
topicB(可选):指定要变基的分支,如果当前已经在topicB上就可以省略
处理变基过程中的冲突
如果变基时出现代码冲突,Git会暂停变基并提示你解决冲突。此时你需要:
- 打开冲突文件,手动解决代码冲突(找到标记
<<<<<<<、=======、>>>>>>>的地方,保留需要的代码) - 标记冲突已解决:
git add <冲突文件名> - 继续变基:
git rebase --continue - 如果遇到多个冲突,重复以上步骤直到变基完成
如果中途想放弃变基,执行:git rebase --abort,分支会回到变基前的状态
验证最终分支结构
变基完成后,用以下命令查看分支图,确认是否符合你的预期:
git log --graph --oneline --all
你应该能看到类似这样的结构:
* abc123 (topicB) - topicB的第三个提交 * def456 - topicB的第二个提交 * ghi789 - topicB的第一个提交 | * jkl012 (topicA) - topicA的第三个提交 | * mno345 - topicA的第二个提交 | * pqr678 - topicA的第一个提交 |/ * stu901 (development) - 共同起点的第二个提交 * vwx234 - 初始提交
常见误区
- 不要混淆
development和它的特定提交:如果development之后又有新提交,你想把topicB变基到原来的共同起点而不是development的最新提交,那么需要把development换成那个共同起点的提交哈希值。你可以用git merge-base topicA development来获取这个共同起点的哈希值。
内容的提问来源于stack exchange,提问作者Teitoku42
相关产品推荐
相关产品推荐

