如何将Git master分支上已合并的PR回退至原始状态?
如何将master分支回退到合并PR前的原始状态?
根据你是否已经将合并后的master推送到远程仓库,分两种场景处理:
场景一:未推送合并后的master到远程
这种情况操作简单,直接重置本地master到合并前的状态即可:
- 运行
git log --oneline查看提交历史,找到合并PR前master分支的最后一个提交哈希值(比如abc123)。 - 执行硬重置:
git reset --hard abc123
此时本地master分支就完全回到合并前的原始状态。
场景二:已推送合并后的master到远程
由于master是生产就绪分支,修改远程提交历史需要谨慎处理,推荐两种方式:
方式一:用git revert生成撤销提交(优先推荐,不破坏历史)
这种方式会生成一个新的提交,用来抵消合并PR带来的所有变更,不会修改原有提交历史,对其他开发者更友好:
- 运行
git log --oneline找到合并PR时生成的merge commit(日志里会显示类似Merge branch 'develop' into master的记录),获取它的哈希值(比如def456)。 - 执行撤销命令:
git revert -m 1 def456
这里的-m 1指定保留master分支的原始内容(merge commit有两个父节点,1对应master分支,2对应develop分支)。 - 推送撤销提交到远程:
git push origin master
远程master分支会恢复到合并前的状态,同时所有操作历史都会被保留。
方式二:强制重置远程分支(仅团队共识下使用)
如果团队成员都同意修改远程历史,可以用硬重置后强制推送的方式:
- 找到合并前master的提交哈希
abc123,执行本地重置:git reset --hard abc123 - 强制推送到远程:
git push origin master --force
⚠️ 注意:这种操作会覆盖远程的提交历史,其他开发者拉取时会遇到冲突,需要他们执行git fetch origin后再运行git reset --hard origin/master同步本地仓库,必须提前和团队沟通确认。
后续注意事项
- 处理完master分支后,务必清理develop分支中的错误变更,避免后续PR再次引入问题。
- 如果使用了
git revert的方式,后续需要重新合并develop的正确变更时,可以先撤销这个revert提交,再发起新的PR,或者通过git cherry-pick挑选需要的提交合并到master。
内容的提问来源于stack exchange,提问作者Sarfaraz Khan
相关产品推荐
相关产品推荐

