结论先行

使用 git reset --hard <commit_id> 可强制将本地代码、暂存区、工作目录彻底回退到指定提交状态,但会丢弃目标提交之后的所有提交记录(需谨慎操作,尤其涉及远程仓库时)。

文章持续更新,可以微信搜一搜「 半个脑袋儿 」第一时间阅读


详细说明

一、git reset 的核心作用

git reset 的本质是移动当前分支的 HEAD 指针到目标提交,根据参数不同(--hard/--soft/--mixed)决定是否修改工作目录和暂存区:

  • --hard:强制回退代码,工作目录、暂存区、提交历史全部回退到指定提交(最彻底,风险最高)。
  • --soft:仅移动 HEAD 指针,工作目录和暂存区代码不变(适合重新提交)。
  • --mixed(默认):移动 HEAD 指针并重置暂存区,但保留工作目录的修改(需重新 git add)。

二、git reset --hard 操作步骤
  1. 定位目标提交

    git log --oneline  ## 查看提交历史,复制目标提交的哈希值(前7位即可)
    ## 或使用图形化工具(如 `gitk`、IDE内置功能)
    • 若提交已被覆盖,可通过 git reflog 查看所有操作记录,找回丢失的提交哈希。
  2. 执行回退操作

    git reset --hard a1b2c3d  ## 替换为实际提交哈希
    • 效果:本地代码立即变为目标提交的状态,之后的提交从历史中移除(但未物理删除,可通过 git reflog 恢复)。
  3. 同步远程仓库(谨慎)

    git push -f origin <branch_name>  ## 强制覆盖远程分支
    • 风险:若他人已拉取旧提交并基于其开发,强制推送会导致代码混乱。

三、适用场景
  • 场景 1:彻底丢弃本地未推送的提交(如实验性代码、错误提交)。
  • 场景 2:修复个人分支的历史提交(如敏感信息泄露、错误合并)。
  • 场景 3:回退到稳定版本后重新开发(需确保无协作依赖)。

四、注意事项
  1. 备份当前状态

    git checkout -b backup_branch  ## 创建临时分支备份当前代码
  2. 恢复误操作

    • 若误删提交,通过 git reflog 找到被重置的提交哈希,再次执行 git reset --hard <commit_id> 恢复。
  3. 避免公共分支使用

    • 对团队协作的 main/develop 等分支,优先使用 git revert 代替 git reset,避免历史记录断裂。
  4. 理解三种模式的区别

    模式 HEAD指针 暂存区 工作目录 典型用途
    --hard 移动 重置 重置 彻底回退代码
    --soft 移动 保留 保留 合并多个提交为一个
    --mixed 移动 重置 保留 部分撤销提交并重新整理

总结

git reset --hard高风险高回报的操作,能快速回退代码,但需严格遵循:

  1. 仅用于本地或私有分支。
  2. 操作前备份代码或创建临时分支。
  3. 理解 --hard 与其他模式的区别。
  4. 公共分支回退优先选择 git revert

Git Reset 彻底解析:--hard 模式操作步骤、风险与完整恢复指北的更多相关文章

  1. Git:上传GitHub项目操作步骤

    git教程:git详解.gitbook #首次上传步骤 首先在工程文件位置处右键git bash here 本地创建ssh key $ ssh-keygen -t rsa -C "your_ ...

  2. LSI 9211-8I阵列卡IR模式Update为IT模式操作步骤!

    以下是DOS系统环境下操作(也可以在windows.linux环境下,只要找到对应的tool就可以)相对应的tool官网可以下载 链接:https://www.broadcom.com/support ...

  3. git reset revert 回退回滚取消提交返回上一版本

    git reset revert 回退回滚取消提交返回上一版本 总有一天你会遇到下面的问题. (1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚. (2)改完代码测试也没有问题,但是上线发现你 ...

  4. git 远程仓库版本的回退以及git reset 几种常用方式记录

    由于 github push 了两个比较潦草的commit, 自己很不满意,又不想重新开vpn进行上传,所以找了一下相关的教程. 最后研究了一下,原理为先在本地还原到你想要的commit,然后强制pu ...

  5. 浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色

    简介 生产环境下的数据是如果可以写在资产负债表上的话,我想这个资产所占的数额一定不会小.而墨菲定律(事情如果有变坏的可能,无论这种可能性有多小,它总会发生)仿佛是给DBA量身定做的.在上篇文章介绍的简 ...

  6. git reset三种模式

    reset三种模式区别和使用场景 区别: --hard:重置位置的同时,直接将 working Tree工作目录. index 暂存区及 repository 都重置成目标Reset节点的內容,所以效 ...

  7. 撤销git reset soft head操作

    一不小心在eclipse的git库中执行了Reset Soft(HEAD ONLY)操作,不料界面中竟然没有找到撤销方法(于是心中五味俱全,经过一番折腾,无果还是回归Git本身),最终通过命令行,很快 ...

  8. [转]恢复 git reset -hard 的误操作

    转帖:http://hi.baidu.com/configuration/item/97fddeea252818d0eb34c964 有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 r ...

  9. 恢复 git reset -hard 的误操作

    有时候使用Git工作得小心翼翼,特别是涉及到一些高级操作,例如 reset, rebase 和 merge.甚至一些很小的操作,例如删除一个分支,我都担心数据丢失. 不 久之前,我在做一些大动作(re ...

  10. Git commit/pull/push的操作步骤

    1.操作步骤需要严格执行如下顺序:commit->pull->push 2.commit:将代码提交到本地仓库. 3.pull:将远程仓库代码同步到本地仓库.如遇冲突,解决冲突,重复com ...

随机推荐

  1. yum repo和rpm,添加阿里repos

    RPMRPM(Red-hat Package Manager),是一个由红帽最早开发出来的包管理器,目前已经是大多数Linux发行的默认包管理器.RPM管理的包都是以.rpm结尾,其中存储了该软件的安 ...

  2. 单机stome安装

    先安装zookeeper,参考本文件夹下安装文档 启动zookeeper 1.解压stome /opt/Server目录下 tar -zxf apache-storm-1.1.0.tar.gz 2.修 ...

  3. 同步工具-腾讯EMR表治理工具安装使用

    一.安装 1.root用户上传文件 cd wangrz -bey luoshu-1.0-bin.tar.gz 2.解压文件到服务目录 重新安装洛书需执行:rm -rf /usr/local/servi ...

  4. Mac安装Scala2.12

    一.下载Scala brew install scala@2.12 二.设置环境变量 vim ~/.bash_profile export SCALA_HOME=/usr/local/opt/scal ...

  5. Doris插入数据底层存储测试

    建表语句 CREATE TABLE IF NOT EXISTS base_site_test( site_id INT DEFAULT '10', city_code INT, user_name V ...

  6. [CF494D] Birthday 题解

    首先 \(S(u)\) 显然是 \(u\) 的子树. 假如 \(u\) 是定点,问题转化为区间求平方和,十分简单. 于是我们用线段树维护区间平方和,支持区间加,然后离线问题,在 \(u\) 的位置处理 ...

  7. autMan奥特曼机器人-自建autMan插件市场

    一.自建市场配置 配置参数 二.上架设置 设置哪些插件上架,哪些不上架 三.检测是否成功 怎样检查是否成功了?订阅一下自己,然后看应用市场上是否显示 四.用户怎样购买插件 用户想买自建市场作者的插件, ...

  8. 支付宝 IoT 设备入门宝典(下)设备经营篇

    上篇介绍了支付宝 IoT 设备管理,但除了这些基础功能外,商户还可以利用设备进行一些运营动作,让设备更好的帮助自己,本篇就会以设备经营为中心,介绍常见的设备相关能力和问题解决方案.如果对上篇感兴趣,可 ...

  9. 开箱即用的go-zero示例

    一.概述 开箱即用的 go-zero 示例,内置 api.scheduler.queue.script 服务. 框架初始版本基于 go-zero 框架的 1.5.5 版本,后续会参考 go-zero ...

  10. 这几天用ng5做了一个俄罗斯方块

    为什么要做这个东西呢? 嗯 为了证明自己会ng吧,最主要的是这几天的工作全是静态页,实在无聊枯燥的很.当然了,肯定还有其他妙不可言的原因,这里不想说出来. 我也忘记我是什么时候有想到用ng做俄罗斯方块 ...