Git如何移除其他分支变更并保留当前新分支的自有提交
完全可以实现,核心思路是将你在新分支上的自有提交整体迁移到正确的develop基线上,剔除所有从mybranch-1带过来的无关提交,全程不会丢失你写的任何代码,操作步骤如下:
第一步:操作前先做备份,避免误操作丢内容
先切到你创建的问题新分支,打一个备份分支:git checkout 你的新分支名称 git branch backup-temp哪怕后续操作出错,只要执行
git reset --hard backup-temp就能完全回到操作前的状态。第二步:定位提交分界点
你需要找到「mybranch-1的提交结束、你自己的提交开始」的分界提交,有两种简单的找法:- 直接执行命令自动查找:
git merge-base mybranch-1 你的新分支名称,命令输出的hash值就是分界点 - 执行
git log --oneline翻看提交记录,找到你自己写的第一个提交,它的父提交就是分界点
把这个分界点的hash值记下来,比如是a1b2c3d。
- 直接执行命令自动查找:
第三步:执行变基操作,迁移自有提交到develop基线
执行以下命令:git rebase --onto develop a1b2c3d命令逻辑是:把分界点
a1b2c3d之后的所有提交(也就是你自己在新分支上写的全部提交),全部重新应用到develop分支的最新节点上,自动跳过所有属于mybranch-1的无关提交。第四步:处理可能出现的冲突
如果变基过程中提示代码冲突,正常编辑冲突文件保留正确内容即可,冲突解决后执行:git add 你解决完冲突的文件路径 git rebase --continue重复这个流程直到rebase执行完成。
第五步:结果校验
执行git log --oneline查看提交链,确认当前分支的基线是develop的最新提交,后面跟着的全是你自己写的提交,没有mybranch-1带过来的多余内容即可。如果校验没问题,可以删掉之前的备份分支:git branch -D backup-temp。
注意:如果你的这个新分支之前已经推送到远程仓库,变基完成后需要执行
git push --force-with-lease推送更新,不要直接用--force强推,--force-with-lease会在远程分支有其他人新增提交时拦截推送,避免覆盖别人的代码。
内容的提问来源于stack exchange,提问作者SCHYNS Anthony

