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

git reset的使用,以及解决还原后如何找回

文章目录

  • git reset 详解
    • 命令作用
    • 常用参数
      • 1. `--soft`
      • 2. `--mixed`(默认参数,可省略)
      • 3. `--hard`
      • 4. 提交引用
    • 总结
  • git reset --hard HEAD^ 还原代码如何找回?
    • 利用 git reflog找回

git reset 详解

git reset 是 Git 中一个功能强大且较为复杂的命令,它主要用于重置当前 HEAD 到指定的状态,能够改变提交历史,还会对工作区和暂存区产生不同的影响。下面详细介绍其作用和常用参数。

命令作用

git reset 命令的核心作用是将当前分支的 HEAD 指针移动到指定的提交位置,并且可以根据不同的参数选项来决定是否更新暂存区和工作区的内容。这使得我们可以撤销提交、修改提交历史,或者将暂存区的内容恢复到某个特定的状态。

常用参数

1. --soft

  • 作用:仅移动 HEAD 指针到指定的提交,不改变暂存区和工作区的内容。被重置的提交所做的更改会保留在暂存区中,可直接再次提交这些更改。
  • 示例
    假设提交历史为 A -- B -- C (HEAD -> main),执行 git reset --soft HEAD~1 后,提交历史变为 A -- B (HEAD -> main),但 C 提交的更改仍在暂存区,可直接 git commit 重新提交。

2. --mixed(默认参数,可省略)

  • 作用:移动 HEAD 指针到指定的提交,并更新暂存区,使其与指定提交的内容一致,但工作区的内容不会改变。这意味着被重置的提交所做的更改会从暂存区移除,但仍保留在工作区中,需要重新添加到暂存区才能提交。
  • 示例
    同样对于提交历史 A -- B -- C (HEAD -> main),执行 git reset HEAD~1(等同于 git reset --mixed HEAD~1)后,提交历史变为 A -- B (HEAD -> main)C 提交的更改从暂存区移除,在工作区中显示为已修改但未暂存的状态,需要执行 git add 重新添加到暂存区。

3. --hard

  • 作用:移动 HEAD 指针到指定的提交,同时更新暂存区和工作区,使其都与指定提交的内容一致。这是一个比较危险的操作,因为它会丢弃工作区和暂存区中所有未提交的更改,直接将它们恢复到指定提交的状态。
  • 示例
    还是提交历史 A -- B -- C (HEAD -> main),执行 git reset --hard HEAD~1 后,提交历史变为 A -- B (HEAD -> main)C 提交的更改不仅从暂存区移除,工作区中相应的更改也会被丢弃,恢复到提交 B 时的状态。

4. 提交引用

  • 作用:除了上述参数,git reset 还需要指定一个提交引用,用于确定要将 HEAD 指针移动到哪个提交位置。常见的提交引用方式有:
    • 提交哈希值:使用完整或部分的提交哈希值来指定具体的提交,例如 git reset --hard 1234567,将 HEAD 指针移动到哈希值以 1234567 开头的提交。
    • 相对引用:使用 ~^ 操作符来表示相对于当前提交的位置。~n 表示向上移动 n 个提交,^ 表示父提交,例如 HEAD~1 表示当前提交的前一个提交,HEAD^^ 表示当前提交的祖父提交。

总结

  • --soft:仅移动 HEAD,保留暂存区和工作区更改。
  • --mixed:移动 HEAD 并更新暂存区,保留工作区更改。
  • --hard:移动 HEAD,同时更新暂存区和工作区,丢弃未提交更改。

在使用 git reset 命令时,尤其是使用 --hard 参数时,要格外小心,因为它可能会导致数据丢失。在操作之前,建议先备份重要的更改或使用 git stash 暂存工作区的修改。

git reset --hard HEAD^ 还原代码如何找回?

利用 git reflog找回

git reflog 会记录所有的 HEAD 引用变化,包括 git reset 操作,即使提交已经不在当前分支的历史中,也能在 reflog 中找到相关记录。

操作步骤:

git reflog

该命令会列出所有 HEAD 的移动记录,每条记录包含一个哈希值、移动操作的描述和对应的时间,示例输出如下:

3456789 HEAD@{0}: reset: moving to HEAD^
1234567 HEAD@{1}: commit: [之前的提交信息]

恢复到指定提交

  • 从 reflog 中找到你想要恢复到的提交的哈希值(例如上面的 1234567),然后执行以下命令进行恢复:
git reset --hard 1234567

相关文章:

  • OpenGL中绘制图形元素的实现(使用visual studio(C++)绘制一个矩形)
  • conda install 和 pip install 的区别
  • 【Java篇】行云流水,似风分岔:编程结构中的自然法则
  • EasyCVR安防视频汇聚平台助力工业园区构建“感、存、知、用”一体化智能监管体系
  • 【公务员考试】高效备考指南
  • 交互式调度算法学不会?————一文学懂(RR(时间片轮转调度算法),优先级调度算法,多级反馈队列调度算法)保姆式解析
  • 【第五节】windows sdk编程:windows 控件基础
  • S_on@atwk的意思
  • k8s基础架构介绍
  • 【软考-架构】5.2、传输介质-通信方式-IP地址-子网划分
  • SQL Server查询优化
  • kali之netdiscover
  • Odoo18 Http鉴权+调用后端接口
  • 用于开发摆线齿轮成形磨削砂轮截形计算程序的 Python 示例
  • 基于 Java 的电商业务秒杀商品高并发、数据一致性、系统性能等多个方面设计方案
  • 【Nacos】服务发布之优雅预热上线方案
  • ArcGIS Pro将有文字标注底图切换为无标注底图(在线地图图源)
  • ubuntu20.04装nv驱动的一些坑
  • Java高频面试之集合-12
  • 「BigBig AGI 1.0 Demo 」来袭!揭示 AI 灵魂奥秘
  • 六连板成飞集成:航空零部件业务收入占比为1.74%,市场环境没有重大调整
  • 法学联合书单|法庭上的妇女
  • 国务院办公厅印发《国务院2025年度立法工作计划》
  • 台行政机构网站删除“汉人”改为“其余人口”,国台办回应
  • 中国海警舰艇编队5月14日在我钓鱼岛领海巡航
  • 上海北外滩,未来五年将如何“长个子”“壮筋骨”?