git revert 命令
核心:
git revert不会删除原有提交历史,而是新建一个提交,用来抵消目标 commit 的改动;适合已经推送到远程、多人协作的公共分支撤销代码。
对比git reset:reset 是移动指针、抹掉历史;revert 是追加反向提交、保留完整历史。参见 git rest 。
revert 基础用法
# 撤销指定的一次提交(生成一个新commit)
git revert <commit-id>
示例流程:
echo "1" > demo.txt
git add demo.txt
git commit -m "v1"
echo "2" >> demo.txt
git add demo.txt
git commit -m "v2"
echo "3" >> demo.txt
git add demo.txt
git commit -m "v3"
# 撤销 v2 这一次提交,v1、v3 还在历史里,新增一个反向提交
git revert 第二个commit的hash
执行后:
- 原来的 v1、v2、v3 记录依然存在
- 自动生成一条新 commit,内容是把 v2 的改动删掉
- 可以正常
git push,不会破坏其他人的仓库
撤销连续多个提交(–no-commit 批量)
# 撤销从 commitA 到 HEAD 这一段所有提交(左开右闭)
git revert --no-commit commitA..HEAD
# 手动检查文件,然后统一提交
git commit -m "revert: 批量撤销多次改动"
--no-commit:只把改动放到暂存区,不自动生成commit,适合批量撤销、中途调整。
撤销合并提交(-m 参数)
merge 提交有两个父节点,revert 合并提交必须指定 -m 1(保留第一条主线)
git revert -m 1 <merge-commit-id>
重点:revert 合并提交 ≠ 回到合并前;它只是抵消这次合并带来的代码改动,分支历史还在。后续如果要重新合并,需要注意:被 revert 过的分支,再次合并时原来的代码变更不会自动回来,需要先 revert 这个 revert。
revert 冲突处理
和普通merge冲突一样:
- 出现冲突,暂停 revert
- 手动修改文件解决冲突
git add 冲突文件git revert --continue完成
如果不想继续撤销:
git revert --abort
git reset vs git revert 对比表
| 项目 | git reset | git revert |
|---|---|---|
| 原理 | 移动 HEAD 指针,删掉后面的提交 | 新建反向提交,抵消改动,历史不变 |
| 提交历史 | 会改写历史 | 历史完整、新增提交 |
| 远程公共分支 | ❌ 不推荐(需要强推,容易炸队友) | ✅ 推荐,安全 |
| 本地未推送分支 | ✅ 很方便 | ✅ 也能用,但没必要 |
| 操作后push | git push -f 强制推送(危险) | 正常 git push |
| 冲突 | 只有 reset 到目标版本,不会产生合并冲突 | 撤销改动时可能产生冲突 |
三种场景怎么选
- 提交还在本地,没有push到远程 → 优先
git reset- 想改备注、合并几次commit:
reset --soft - 撤销commit,代码保留:默认
reset --mixed - 彻底不要代码:
reset --hard
- 想改备注、合并几次commit:
- 已经推送到远程,多人共用分支 → 必须
git revert - 只需要取消add,不回退commit →
git reset HEAD 文件名
配套示例:同一个需求两种方式演示

初始提交顺序:A → B → C,现在想去掉C
方式1:reset(本地未推送)
git reset --hard B
# 历史:A → B,C直接消失
方式2:revert(已推远程)
git revert C
# 历史:A → B → C → revert-C,C还在记录里
高频坑点
- revert 一个 revert:
如果你之前git revert C,现在想把C的代码恢复回来,直接 revert 那条 revert 的commit,改动就回来了。
git revert revert-C的hash
- 不要用 reset –hard + push -f 在 main/master / 公共开发分支;个人私有分支可以酌情使用。
- reset 带文件路径:只撤销暂存,不移动HEAD,和 revert 完全不是一类用途。
一句话速记
- reset:擦掉历史,时光倒流(本地私用)
- revert:新增一张抵消单据,历史留痕(公共分支安全回退)
0 条笔记