前言

今天有同事问起Git的撤销命令,revert和reset到底有什么区别?索性整理一下,做一次比较全面的对比。总的来说,git revertgit reset 都是用来撤销更改的,但它们的运作方式和适用场景,差别其实非常大。

核心区别对比

特性 git revert git reset
安全性 安全 - 不改变历史记录 危险 - 会修改历史记录
操作对象 提交(commit) 提交(commit)或暂存区
历史记录 创建新的撤销提交 删除/移动提交历史
团队协作 适合共享仓库 不适合已推送的提交
工作区影响 不影响未提交的更改 根据模式影响工作区

详细说明

git revert

特点

git reset

三种模式对比

模式 工作区 暂存区 历史记录 适用场景
--soft 不变 保留更改 回退 修改提交信息
--mixed (默认) 不变 清空 回退 重新组织提交
--hard 清空 清空 回退 彻底放弃更改

命令示例

# 重置到前一个提交(保留工作区更改,取消暂存)
git reset HEAD~1
# 重置并保留更改在暂存区
git reset --soft HEAD~1
# 彻底重置,丢弃所有更改
git reset --hard HEAD~1
# 重置到特定提交
git reset --hard 

使用建议

使用git revert当:

使用git reset当:

实际示例

# 错误提交了不该提交的文件,但已推送到远程
# ✅ 正确做法:使用 revert
git revert HEAD
git push

# 本地提交了错误信息,还未推送
# ✅ 正确做法:使用 reset
git reset --soft HEAD~1
# 修改文件后重新提交
git add .
git commit -m "正确的提交信息"

# 想完全放弃最近的本地更改
# ✅ 使用 hard reset(谨慎!)
git reset --hard HEAD
# reset 后必须使用 -f 强制push才能推送成功
git push -f

重要原则

记住这个简单规则:公共历史用 revert,私有历史用 reset

总结

理清了reset和revert的基本原理,你在什么时间该使用哪个命令,心里自然就有数了。

本文转载于:https://www.jb51.net/program/354751fex.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。