You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bitbucket中Git误推合并到错误分支 如何回滚远程dev分支到目标状态

问题根因

你本地执行git reset --hard回到目标提交后,本地分支的提交历史比远程development分支短——远程还存着那几个错误push、错误merge的提交,Git默认会阻止这种会覆盖远程已有提交历史的非快进推送,所以Android Studio才会提示你先pull,一旦pull就会把远程的错误提交同步回本地,自然回到错误状态。

解决方法

根据你对Bitbucket上development分支的权限、团队分支规范选对应的方案就行:

方案1:强制推送(适合有分支强制推送权限、团队允许改写公共分支历史的场景)

先确认本地当前已经停在你要恢复的「last previous wanted merge」对应commit上,直接执行带保护的强制推送命令(比裸--force安全,不会覆盖你上次拉取之后别人推的正常提交):

git push origin development --force-with-lease

执行完刷新Bitbucket页面就能看到远程分支已经回到目标状态,此时IDE再执行pull也不会拉到错误提交。

注意:推送前先跟团队同步下,让其他正在用development分支的同事暂时停推,等你推送完成后,让他们执行git fetch origin && git reset --hard origin/development同步本地分支状态,不要直接merge,避免把本地残留的错误提交重新推到远程。

方案2:反向生成撤销提交(适合没有强制推送权限、团队禁止改写公共分支历史的场景)

不用回退本地历史,直接生成一个新提交把所有错误改动抵消掉,全程不需要强制推送:

  1. 先执行git pull origin development,让本地分支和远程错误状态完全同步
  2. 执行revert命令撤销最后那个错误的合并提交:
    git revert -m 1 <unwanted merge对应的完整commit hash>
    
    这里-m 1的作用是指定保留合并提交的第一个父节点(也就是你要留存的、来自「last previous wanted merge」这条线的内容),执行完成后会自动生成一个新的撤销提交
  3. 正常执行git push origin development把这个撤销提交推到远程即可,此时远程分支的代码内容和你要回退到的目标节点完全一致,所有历史提交记录也会保留,符合公共分支不删历史的规范。后续如果要找回错误提交里的有用代码,单独cherry-pick对应片段就行。

内容的提问来源于stack exchange,提问作者Unknown X

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 17:25:04