如何撤销Git中从指定分支合并到目标分支的所有相关提交
操作方案
前置准备
先切换到本地QA分支并拉取最新代码,确保操作基于最新版本:
git checkout QA git pull origin QA
推荐方案:Revert 所有对应合并提交(不影响其他提交,操作风险最低)
这是最符合你场景的实现方式,不需要改动QA上其他提交的历史:
- 过滤出所有从
release/4.0.1合并到QA的合并提交哈希,执行命令:
git log --merges --grep="release/4.0.1"
输出结果按时间从新到旧排序,每条记录开头commit后跟着的字符串就是对应合并提交的哈希值。
2. 按从新到旧的顺序依次revert每个合并提交,每次执行都指定父节点为1(即保留QA本身的代码线,撤销release分支带来的变更):
git revert -m 1 <最新的合并提交哈希> git revert -m 1 <次新的合并提交哈希> # 按顺序处理完所有匹配的合并提交即可
- 本地验证代码已经完全移除
release/4.0.1的相关变更后,推送到远程QA分支即可:
git push origin QA
可选方案:交互式变基剔除提交(仅适合小场景)
如果QA上除了release/4.0.1之外的提交数量很少,且团队允许重写分支历史,可以用交互式变基直接删除对应提交:
git rebase -i <第一次合并release/4.0.1之前的QA提交哈希>
在弹出的编辑界面中,把所有属于release/4.0.1的提交前的pick改成drop,保存退出后变基完成,验证代码无误后强制推送即可。
注意事项
- 操作前建议先给当前QA分支打备份标签,避免操作失误可以快速回滚:
git tag qa_backup_before_revert - 如果后续还要把
release/4.0.1重新合并到QA,需要先把本次做的所有revert提交再revert回来,否则之前被撤销的变更不会被再次合并。
内容的提问来源于stack exchange,提问作者Mujtaba Alboori
相关产品推荐
相关产品推荐

