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