如何将误基于branch_1的branch_2直接重定基准到master分支?
解决误将分支重定基准到非master分支的问题
你可以通过两种方式修正这个误操作,分别适用于命令行和IDEA图形界面:
命令行方式
方法1:重置到误操作前的状态后重新重定基准
- 查看
branch_2的操作日志,找到误执行rebase前的提交哈希:
日志里会显示git reflog branch_2branch_2的所有历史移动记录,找到标记类似checkout: moving from master to branch_2或误rebase前的那条记录,记下对应的哈希值(比如abc123)。 - 切换到
branch_2并重置到该提交:git checkout branch_2 git reset --hard abc123 - 重新将
branch_2重定基准到master:git rebase master
方法2:直接提取branch_2独有的提交移到master上
如果不想重置历史,可以用rebase --onto参数,直接把branch_2中不属于branch_1的提交迁移到master分支:
git rebase --onto master branch_1 branch_2
这条命令会把branch_2里所有在branch_1之后的提交,重新放到master的最新提交之上。
IDEA图形界面方式
- 打开Git日志面板:点击顶部菜单
View > Tool Windows > Git,切换到Log标签页。 - 在日志中找到
branch_2在误执行rebase之前的那个提交(也就是还没有基于branch_1的提交节点)。 - 右键点击该提交,选择
Reset Current Branch to Here,在弹出的选项中选择Hard(注意:该操作会丢弃误rebase后的所有提交内容,请确认无误后执行)。 - 确保当前分支是
branch_2,然后使用IDEA的重定基准功能:点击Git工具栏的Rebase按钮,或者右键master分支选择Checkout and rebase onto...,完成重定基准操作。
为什么直接重定基准无效?
因为branch_2现在的提交历史已经包含了branch_1的所有提交,而branch_1本身基于master,Git会判定branch_2的提交已经全部在master的上游,所以直接执行rebase master不会产生任何变化。
内容的提问来源于stack exchange,提问作者Sergey Zolotarev
相关产品推荐
相关产品推荐

