文章目录
- 作用:创建一个新的提交来撤销指定提交的更改 使用场景:撤销已推送到远程仓库的提交 命令示例: # 撤销最近一次提交 git revert HEAD # 撤销指定提交 git revert <commit-hash> # 撤销多个连续提交 git revert <oldest-commit>..<latest-commit> 特点: 历史记录中会保留原提交和新创建的撤销提交 可以撤销任意历史提交,而不影响后续提交 适合团队协作环境
- 作用:将当前分支重置到指定状态,有三种模式 三种模式对比: 模式 工作区 暂存区 历史记录 适用场景 –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 revert当:
- 使用git reset当:
- 实际示例
- 总结
今天有同事问我Git的撤销命令revert与reset有什么区别?特意整理了一下,做个比较全面的对比。总体来说,git revert 和 git reset 都是用于撤销更改的 Git 命令,但它们的工作方式和用途都有显著区别。
| 特性 | git revert | git reset |
|---|---|---|
| 安全性 | 安全 – 不改变历史记录 | 危险 – 会修改历史记录 |
| 操作对象 | 提交(commit) | 提交(commit)或暂存区 |
| 历史记录 | 创建新的撤销提交 | 删除/移动提交历史 |
| 团队协作 | 适合共享仓库 | 不适合已推送的提交 |
| 工作区影响 | 不影响未提交的更改 | 根据模式影响工作区 |
-
作用:创建一个新的提交来撤销指定提交的更改
-
使用场景:撤销已推送到远程仓库的提交
-
命令示例:
# 撤销最近一次提交
git revert HEAD
# 撤销指定提交
git revert <commit-hash>
# 撤销多个连续提交
git revert <oldest-commit>..<latest-commit>
作用:创建一个新的提交来撤销指定提交的更改
使用场景:撤销已推送到远程仓库的提交
命令示例:
# 撤销最近一次提交 git revert HEAD # 撤销指定提交 git revert <commit-hash> # 撤销多个连续提交 git revert <oldest-commit>..<latest-commit>
特点:
-
历史记录中会保留原提交和新创建的撤销提交
-
可以撤销任意历史提交,而不影响后续提交
-
适合团队协作环境
-
作用:将当前分支重置到指定状态,有三种模式
作用:将当前分支重置到指定状态,有三种模式
三种模式对比:
| 模式 | 工作区 | 暂存区 | 历史记录 | 适用场景 |
|---|---|---|---|---|
| –soft | 不变 | 保留更改 | 回退 | 修改提交信息 |
| –mixed (默认) | 不变 | 清空 | 回退 | 重新组织提交 |
| –hard | 清空 | 清空 | 回退 | 彻底放弃更改 |
命令示例:
# 重置到前一个提交(保留工作区更改,取消暂存) git reset HEAD~1 # 重置并保留更改在暂存区 git reset --soft HEAD~1 # 彻底重置,丢弃所有更改 git reset --hard HEAD~1 # 重置到特定提交 git reset --hard <commit-hash>
-
撤销已推送到远程仓库的提交
-
需要保留完整的历史记录
-
多人协作,避免影响他人工作
-
只想撤销某个特定提交,而保留后续更改
撤销已推送到远程仓库的提交
需要保留完整的历史记录
多人协作,避免影响他人工作
只想撤销某个特定提交,而保留后续更改
-
撤销本地未推送的提交
-
需要重写本地历史(如整理提交记录)
-
完全放弃某些本地更改
-
注意:如果提交已推送,需要强制推送(git push -f),这会破坏团队协作(且强制推送后会抹掉git仓库中原来的提交记录)
撤销本地未推送的提交
需要重写本地历史(如整理提交记录)
完全放弃某些本地更改
注意:如果提交已推送,需要强制推送(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区别内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- Git恢复之前版本的两种方法reset、revert(图文详解)
- Git撤销&回滚操作(git reset 和 get revert)
- Git恢复之前版本的三种方法之reset、revert、rebase详解
- git revert和git reset的区别详解
- git版本回退方式(git reset、git revert、git stash)
- git中reset和revert区别小结
- Git版本回退之reset和revert使用详解