当前位置: 首页 > news >正文

git reset

文章目录

  • 1.简介
  • 2.命令格式
  • 3.选项说明
  • 4.常用示例
  • 5.小结
  • 参考文献

1.简介

git reset 将当前 HEAD 重置为指定状态,可用于版本回退。

可将分支重设(reset)到指定的<commit>,如果不显示指定 commit,默认是 HEAD,即最近一次提交。

比如我们 commit 后,可能发现这次 commit 的内容有错误,那么有两种处理方法:
(1)修改错误内容,再次 commit。
(2)使用 git reset 撤销这一次错误的 commit。

第一种方法比较直接,但会多一次 commit 记录,建议使用 git reset 进行版本回退,方便快捷,错误的 commit 记录不会被保留下来。

2.命令格式

git reset [-q] [<tree-ish>] [--] <paths>…​
git reset (--patch | -p) [<tree-ish>] [--] [<paths>…​]
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

3.选项说明

-q, --quiet静默模式,只打印错误信息。
--soft重置 HEAD,保留暂存区和工作区。版本库的修改会回退到暂存区,工作区的修改保持不动。
--mixed重置 HEAD 和暂存区,保留工作区。版本库与暂存区的修改都将回退到工作区,即回滚到了所有 git add 和 git commit 的执行之前的状态。为默认模式
--hard重置 HEAD、暂存区和工作区。暂存区和工作区的修改都将被丢弃。请谨慎使用,暂存区的修改很难找回,工作区的修改无法找回。
--merge重置 HEAD 和暂存区,保留工作区。与 --mixed 不同的是,暂存区的修改不会回退到工作。如果工作区的某个文件与暂存区不同,则命令执行失败。该选项很少使用
--keep重置 HEAD 与暂存区,保留工作区。与 --mixed 不同的是,暂存区的修改不会回退到工作。与 --merge 的区别是,如果工作区的某个文件与暂存区不同,则命令不会执行失败。该选项很少使用。
-p, --patch以 patch 的方式展示出来需要 reset 的代码, git reset -p 和 git add -p 就是一对互为反向的操作,后者是把工作目录下变更的代码以 patch 的方式展示出来,以互动的方式应用到 index 上,前者则是一个反向操作
-N, --intent-to-add任何新加入到 HEAD 的文件,再回退到工作区后都将标记为 tracked,即受版本控制

4.常用示例

(1)放弃当前版本的所有修改。

git reset --hard
git reset --hard HEAD

(2)分支版本跳转。

git reset --hard [commit]

commit 可取值 HEAD 当前版本,上一个版本 HEAD^(或 HEAD~1),上上个版本就是 HEAD^^(或 HEAD~2),以此类推。缺省为 HEAD。

(3)将暂存区的修改回退到工作区。

git reset <file>...
git reset HEAD <file>...
git reset --mixed <file>...
git reset --mixed HEAD <file>...

(4)将本地分支恢复至远端仓库的最新提交。

如果你已经使用 git reset --hard 回滚了本地代码,现在需要将分支恢复至远端仓库的最新提交,一般有两种方式:

方法一:硬重置(推荐)

直接将本地分支指向远端分支的最新提交(如 origin/main):

git reset --hard origin/main

效果:

本地 HEAD 和分支指针会与 origin/main 完全一致。

丢弃所有未提交的本地修改(包括未暂存的文件),确保与远端代码一致。

方法二:删除本地分支并重新检出

# 选项 -B 为强制模式:无论分支是否存在,均强制创建/重置分支。若分支已存在,会将其指向新的起点。
git checkout -B main origin/main

或分步操作:

git branch -D main         # 删除本地分支
git checkout main          # 重新检出(会自动匹配远端分支)

5.小结

git reset 主要用于 修改分支引用(HEAD),通过不同选项控制对 工作目录、暂存区 和 提交历史 的影响,实现以下操作:

  • 撤销提交(回退版本)
  • 取消暂存文件
  • 彻底丢弃本地更改

核心要点:

--soft:只动 HEAD,保留暂存区和工作区,适合修整提交历史。
--mixed:动 HEAD 和暂存区,适合撤销 git add。
--hard:彻底回退,慎用!

口诀: --soft 改记录,--mixed 清暂存,--hard 全丢掉,远程提交别乱搞。


参考文献

Git - git-reset Documentation

http://www.dtcms.com/a/321650.html

相关文章:

  • Maven/Gradle常用命令
  • 14. isaacsim4.2教程-April Tags/给相机加噪声
  • GPT-5发布:AI竞赛进入新阶段
  • Spring Boot Redis 缓存完全指南
  • ApiPost 设置统一URL前缀
  • 计算机基础速通--数据结构·串的应用
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(中)
  • 元数据管理与数据治理平台:Apache Atlas 构建与安装 Building Installing Apache Atlas
  • 有哪些产品需要遵循ASTM D4169-23e1
  • 【ee类保研面试】其他类---计算机网络
  • 操作系统:多线程模型(Multithreading Models)与超线程技术(Hyperthreading)
  • AI漫画翻译器-上传图片自动翻译,支持多语言
  • 学习Java的Day27
  • 基于ffmpeg和rk3588的mpp编解码库多路融屏程序设计
  • Git 基础操作笔记(速查)
  • 嵌入式Linux学习 - 数据结构6
  • 【设计模式】抽象工厂模式 (工具(Kit)模式)
  • PPT科研绘图实践笔记(持续更新)
  • AI 编程工具使用心得与对比评测
  • Python实现点云PCA配准——粗配准
  • 三种经典寻路算法对比
  • 微服务的好与坏
  • kafak
  • 经常问的14000
  • HTML5 Web Workers 深度剖析:助力网页性能飞速提升
  • imx6ull-驱动开发篇14——原子操作
  • FFmpeg 视频旋转信息处理:3.4 vs 7.0.2
  • 开发避坑指南(22):Vue3响应式编程中this绑定机制与解决方案
  • C++ 部署LSTM(.onnx)
  • 大模型中的核心参数temperature 您知道是什么东东吗?