上线出问题,git revert -m 1 撤掉了 release 合并。修好后再 merge 一次,release 上的改动一个都没进来,git diff 是空的。第一次遇到会往复杂处想,其实漏掉的多是个小前提。
git revert -m 1 7d9e0a1 git revert 4c1b2d8 git merge --no-ff release/1.8 git diff release/1.8 --stat
revert 一个合并提交只撤销它相对某个父提交的差异,Git 同时记下这条合并已被撤销。之后再把同一分支合进来,Git 认为这些提交已经处理过,直接跳过。这一点先确认清楚,后面就不用反复试。
碰到「revert merge 提交」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。
具体做法是,git log --oneline --graph 找到 merge 提交和对应的 revert 提交;先 revert 那个 revert 提交 把撤销动作抵消;合并时用 -m 1 指定保留主干那一侧;合并后 git diff 目标分支 确认改动真的进来;把这次操作记在发布记录里 避免下一个人重复踩。
改完照着核一遍,diff 里能看到 release 分支的全部改动 不再是空提交。
