Command Reference
git revert 教程
讲清 git revert 为什么适合撤销已共享提交,以及它和 reset 在历史表达上的关键区别。
一句话理解
git revert 不会删掉旧提交,而是创建一个“反向提交”来抵消指定提交带来的变更。
为什么它在团队里很重要
如果一个错误提交已经推送到共享分支,直接 reset 往往会改写公共历史,影响其他协作者。revert 的好处是:历史保留、撤销明确、对共享分支更安全。
基本用法
git revert <commit>
执行后 Git 会生成一个新提交,内容是把目标提交引入的差异反向应用一次。
一次撤销多个提交
git revert older_commit^..newer_commit
这适合某一段连续提交整体有问题,但你仍然希望保留“这里曾发生过什么”的历史记录。
先生成变更,不立刻提交
git revert --no-commit <commit>
如果你想把多个 revert 聚合成一次人工整理后的提交,--no-commit 会更灵活。
revert merge commit 要更谨慎
官方文档特别提到,撤销 merge commit 时需要指定主线父提交:
git revert -m 1 <merge-commit>
这里的 -m 并不是写提交信息,而是告诉 Git 你要把哪个父提交当作主线来理解这次撤销。
revert 和 reset 的区别
revert:保留历史,新增一个撤销提交reset:移动引用,可能改写历史
如果提交已经共享,优先考虑 revert;如果提交只在你本地,还没人依赖这段历史,reset 才更常见。
常见误区
误区 1:revert 就等于“删除那个提交”
不是。那个提交依然在历史里,只是被一个新提交抵消了效果。
误区 2:revert 一定不会冲突
不一定。如果后续提交已经继续修改了相同代码,revert 同样可能遇到冲突。
一个使用判断
你如果在问“我要不要把这段公开历史改写掉”,通常就应该先停一下,优先考虑 revert 而不是 reset --hard。