Git撤销命令revert与reset区别全面对比

 更新时间:2025年12月12日 09:39:16   作者:rchmin  
在Git中git revert和git reset都可以用来撤销更改,但它们的工作方式和影响有很大的不同,这篇文章主要介绍了Git撤销命令revert与reset区别全面对比的相关资料,需要的朋友可以参考下

前言

今天有同事问我Git的撤销命令revert与reset有什么区别?特意整理了一下,做个比较全面的对比。总体来说,git revert 和 git reset 都是用于撤销更改的 Git 命令,但它们的工作方式和用途都有显著区别。

核心区别对比

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

详细说明

git revert

  • 作用:创建一个新的提交来撤销指定提交的更改

  • 使用场景:撤销已推送到远程仓库的提交

  • 命令示例

    # 撤销最近一次提交
    git revert HEAD
    
    # 撤销指定提交
    git revert <commit-hash>
    
    # 撤销多个连续提交
    git revert <oldest-commit>..<latest-commit>

特点

  • 历史记录中会保留原提交和新创建的撤销提交

  • 可以撤销任意历史提交,而不影响后续提交

  • 适合团队协作环境

git reset

  • 作用:将当前分支重置到指定状态,有三种模式

三种模式对比

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

命令示例

# 重置到前一个提交(保留工作区更改,取消暂存)
git reset HEAD~1

# 重置并保留更改在暂存区
git reset --soft HEAD~1

# 彻底重置,丢弃所有更改
git reset --hard HEAD~1

# 重置到特定提交
git reset --hard <commit-hash>

使用建议

使用git revert当:

  • 撤销已推送到远程仓库的提交

  • 需要保留完整的历史记录

  • 多人协作,避免影响他人工作

  • 只想撤销某个特定提交,而保留后续更改

使用git reset当:

  • 撤销本地未推送的提交

  • 需要重写本地历史(如整理提交记录)

  • 完全放弃某些本地更改

  • 注意:如果提交已推送,需要强制推送(git push -f),这会破坏团队协作(且强制推送后会抹掉git仓库中原来的提交记录

实际示例

# 错误提交了不该提交的文件,但已推送到远程
# ✅ 正确做法:使用 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

  • 未跟踪的本地更改:使用 git checkout -- <file> 或 git clean

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

总结

  • reset是彻底回退到指定的commit版本,该commit后的所有commit都将被清除,包括提交历史记录;
  • revert仅仅是撤销指定commit的修改,并不影响后续的commit,但所撤销的commit被后续的commit修改了同一地方则会产生冲突;
  • reset执行后不会产生记录,revert执行后会产生记录;
  • reset执行后无法再次恢复,revert执行后因为不会清除记录,并且会产生新纪录,所以文件不会丢失,你可以多次执行revert恢复到某次改变之前的状态;
  • reset执行后HEAD会后移,而revert的HEAD则一直是向前的;

理清了reset和revert的基本原理,你就明白了在什么时间该使用哪个命令更为合适了!

到此这篇关于Git撤销命令revert与reset区别全面对比的文章就介绍到这了,更多相关Git撤销命令revert与reset区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 音视频基本概念和FFmpeg的简单入门教程详解

    音视频基本概念和FFmpeg的简单入门教程详解

    FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换,这篇文章主要介绍了音视频基本概念和FFmpeg的简单入门,需要的朋友可以参考下
    2022-04-04
  • git add -A 和 git add . 的区别详解

    git add -A 和 git add . 的区别详解

    这篇文章主要介绍了git add -A 和 git add . 的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 详谈git 提交代码步骤,干货

    详谈git 提交代码步骤,干货

    这篇文章主要介绍了详谈git 提交代码步骤。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • OpenAI 函数调用示例及功能入门教程

    OpenAI 函数调用示例及功能入门教程

    这篇文章主要为大家介绍了OpenAI 函数调用示例及功能入门教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • git提交出现commit提醒信息界面怎样退出

    git提交出现commit提醒信息界面怎样退出

    这篇文章主要介绍了git提交出现commit提醒信息界面怎样退出问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 关于大型页游后端管理系统的一点经验和个人见解

    关于大型页游后端管理系统的一点经验和个人见解

    做过游戏开发的人都知道,端游可以用c++,页游可以用sl或者as3,鉴于这段时间一直在看网页游戏开发的知识,所以关于游戏开发,我有一点自己的见解
    2012-06-06
  • git merge最简洁用法详解

    git merge最简洁用法详解

    git-merge 命令是用于从指定的 commit(s) 合并到当前分支的操作,本文重点给大家介绍git merge最简洁用法,感兴趣的朋友跟随小编一起看看吧
    2020-12-12
  • Git 教程之远程仓库详解

    Git 教程之远程仓库详解

    本文主要介绍Git 远程仓库的知识,这里整理了相关资料,及命令详解,图文并茂的介绍该部分内容,有需要的小伙伴可以参考下
    2016-09-09
  • Git Submodule使用完整教程(小结)

    Git Submodule使用完整教程(小结)

    这篇文章主要介绍了Git Submodule使用完整教程(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • git如何回退已提交的代码中的指定文件

    git如何回退已提交的代码中的指定文件

    在Git中,有多种方法可以回退某个提交中特定文件的内容,常见的方法包括使用`git checkout`、`git revert`、`git reset`和`git rebase`,这些方法各有优缺点,可以根据具体情况选择合适的方法,在执行这些命令之前,建议先备份工作或使用`git stash`保存未提交的工作
    2025-12-12

最新评论