如何彻底回退master分支的多个提交(含移除提交历史)
针对不可修改master分支的历史清理方案
核心前提
因为master分支不可修改(禁止强制推送改写历史),绝对不能直接在master上执行变基、重置这类会改写历史的操作,必须通过合规流程实现需求。
具体步骤
验证feature分支变基结果
先在本地feature分支确认变基是否生效:git log --oneline确保当前HEAD指向
123456,且后续无需要丢弃的5个提交。生成反向提交抵消历史改动
既然不能改写master历史,就用新提交“撤销”目标提交的所有改动。推荐基于最新master创建修复分支操作:git checkout master git pull git checkout -b revert-5-commits # 为最后5个提交生成反向撤销提交 git revert HEAD~5..HEAD若过程中出现冲突,解决冲突后执行
git revert --continue即可,每个目标提交都会对应生成一个反向提交。推送分支并创建PR
将修复分支推送到远程:git push origin revert-5-commits基于该分支创建到
master的PR,此时PR的diff会正确展示所有要撤销的改动,通过评审后合并到master即可。同步feature分支
等反向分支合并到master后,将master的更新同步到你的feature分支:git checkout feature git rebase master完成后feature分支会与master保持一致,历史记录也符合要求。
关键说明
直接对master执行强制推送(git push -f)会破坏公共历史,导致其他协作者的本地仓库与远程产生冲突,这是Git协作中的严格禁忌,绝对不能操作。
内容的提问来源于stack exchange,提问作者Dreamer
相关产品推荐
相关产品推荐

