如何用更少命令无需临时分支将Git分支移至另一分支顶端?
实现需求的简化命令方案
你的需求本质是将branch1中从共同祖先B之后的所有提交(F、G、H)复制到branch2的末端E,再让branch2指向复制后的新提交H'。确实可以用rebase --onto来简化操作,无需临时分支tmp。
单条组合命令实现
git rebase --onto branch2 B branch1 && git branch -f branch2 branch1
命令解释
git rebase --onto branch2 B branch1:--onto branch2:指定要把提交复制到的目标位置(即branch2当前指向的E)B:指定上游边界,意思是只处理branch1中在B之后的提交(也就是F、G、H)- 执行后,
branch1会指向新复制的H',原branch1的F、G、H仍保留在原位置
git branch -f branch2 branch1:- 强制将
branch2移动到branch1当前指向的H',完成分支结构的更新
- 强制将
不改动branch1的替代方案
如果不想修改branch1的指向,可以用临时变基的方式直接生成新提交并更新branch2:
git branch -f branch2 $(git rebase --onto branch2 B branch1 --no-update-head)
这里--no-update-head参数会让rebase只完成提交复制,不改动branch1的位置,而是返回新提交H'的哈希值,再通过git branch -f让branch2指向该哈希。
内容的提问来源于stack exchange,提问作者chx
相关产品推荐
相关产品推荐

