git reset 与 revert
约 689 字大约 2 分钟
布欧-Lewyon
2026-05-15
首页 › Git › 高级操作(在新窗口打开) › git reset 与 revert
git reset
git reset 将 HEAD 和当前分支指针移动到指定提交,可能丢失历史(取决于模式)。
reset 三种模式
# --soft:仅移动 HEAD,暂存区和工作区不变
git reset --soft HEAD~1
# --mixed(默认):移动 HEAD,重置暂存区,工作区不变
git reset HEAD~1
git reset --mixed HEAD~1
# --hard:移动 HEAD,重置暂存区和工作区(⚠️ 丢失修改)
git reset --hard HEAD~1reset 常用场景
# 撤销最近一次提交,保留修改到工作区
git reset --soft HEAD~1
# 撤销暂存(unstage)
git reset HEAD file.txt
git restore --staged file.txt # 新方法
# 完全丢弃最近三次提交(不可恢复,谨慎!)
git reset --hard HEAD~3
# 恢复到指定提交(但保留之后所有修改到工作区)
git reset --mixed a1b2c3d
git reset --hard会丢失未提交的修改和之后的提交。使用前务必确认。
git revert
git revert 不删除历史,而是创建一个新的提交来逆转指定提交的内容:
# 逆转某次提交(创建新提交)
git revert a1b2c3d
# 逆转最近一次提交
git revert HEAD
# 逆转多个提交(每次逆转产生一个提交)
git revert HEAD~3..HEAD
# 不自动提交(手动编辑提交信息)
git revert --no-commit HEADreset vs revert
| 对比 | reset | revert |
|---|---|---|
| 历史 | 删除提交 | 保留提交,增加新提交 |
| 安全性 | 危险,丢失历史 | 安全,可推送 |
| 已推送的分支 | ❌ 不可用 | ✅ 可用 |
| 适用场景 | 本地未推送的提交 | 已推送到远程的提交 |
git restore
Git 2.23+ 引入 restore 替代部分 checkout 和 reset 功能:
# 从暂存区恢复文件(丢弃暂存)
git restore --staged file.txt
# 从工作区恢复文件(丢弃修改)
git restore file.txt
# 从特定提交恢复文件
git restore --source a1b2c3d file.txt小结
git reset移动分支指针,--soft/--mixed/--hard控制影响范围。git revert创建新提交逆转变更,安全可推送。- 已推送的提交用
revert,未推送的用reset --soft或--mixed。 git restore是 2.23+ 的新命令,替代checkout file和reset file。--hard+ 未推送分支是唯一安全的 reset 用法。
上一节:推送与拉取 下一节:git rebase 与 cherry-pick
