Git如何修改分支的基准分支?两种rebase操作哪种更合适?
Git分支变基操作解答
首先明确你写的第一种操作是错误的
git rebase --onto的参数规则为 git rebase --onto <新基准分支> <旧基准分支> [要变基的目标分支],你写的git rebase --onto feature2 feature1相当于把旧基准设为feature1本身,匹配到的待迁移提交范围是feature1..feature1,也就是空集合,执行后不会有任何变更,完全达不到修改基准的效果。
正确的非交互式变基命令应该是:
git checkout feature1 git rebase --onto feature2 master
这个命令的含义是:把feature1上所有从master分叉后产生的提交,全部迁移到feature2的顶端,实现把feature1的基准从master改成feature2的效果。
关于git rebase -i feature2的有效性
这个命令是可以实现需求的。它的逻辑是:将当前分支(feature1)所有不在feature2上的提交,重新在feature2的顶端回放。只要你的feature1没有混入不需要的无关提交,执行后就能直接把基准切换为feature2。
两种有效操作的对比
- 如果你能100%确定feature1的提交历史干净,所有需要保留的提交都是从master分叉后产生的,两种操作效果完全一致。
- 带
-i的交互式操作确实更安全:执行后会弹出编辑界面,明确列出所有要被迁移的提交,你可以提前核对提交范围是否正确,还可以按需调整提交顺序、合并提交、丢弃无用提交。尤其是当feature1有过合并其他分支的操作、历史比较杂乱的时候,交互式变基可以避免误迁移多余提交。
操作建议
操作前可以先给当前feature1打个临时备份标签:
git tag feature1_bak
万一变基后结果不符合预期,直接执行git reset --hard feature1_bak就能恢复到变基前的状态,没有任何风险。
变基完成后可以执行git log --oneline --graph检查提交历史是否符合预期。
内容的提问来源于stack exchange,提问作者user2297996
相关产品推荐
相关产品推荐

