跳到主要内容

Git revert 指南

什么时候用

当一个提交已经推送到远程,或者你不想改写公共历史时,优先使用 git revert

它的思路不是“删除旧提交”,而是“生成一个新的反向提交来抵消旧提交”。

先判断当前状态

git status
git log --oneline --decorate -5
  • 工作区最好保持干净,再执行 revert,这样更容易看清冲突。
  • 先确认要撤销的提交哈希,不要只凭印象操作。

推荐命令

场景推荐命令结果
撤销最后一次提交git revert HEAD生成一个新的反向提交
撤销指定提交git revert <commit>保留历史,只追加一条撤销记录
合并多个撤销为一次提交git revert --no-commit <commit1> <commit2>先应用反向改动,再手动提交
撤销 merge 提交git revert -m 1 <merge-commit>需要显式指定主线父提交

常见场景

撤销刚刚推送出去的最后一次提交

git revert HEAD
git push origin $(git branch --show-current)

撤销某个较早的坏提交

git log --oneline
git revert a1b2c3d

想把多个错误提交合并成一次撤销提交

git revert --no-commit <commit1> <commit2>
git commit -m "Revert problematic changes"

撤销 merge 提交

git revert -m 1 <merge-commit>

-m 1 通常表示保留第 1 个父提交所在主线;如果你不清楚父提交关系,先不要贸然执行。

风险与边界

  • git revert 不会删除原提交,只会新增一条相反的提交记录。
  • 如果目标提交和当前代码已经相差很远,revert 也可能出现冲突。
  • 撤销 merge 提交比撤销普通提交更容易出错,必须先搞清楚主线父提交是谁。
  • 如果提交还没推送、也没人依赖它,很多时候 撤销提交 里的 reset 更直接。

相关命令

git show <commit>
git revert HEAD
git revert --no-commit <commit1> <commit2>
git log --oneline --decorate -10