如何在 Git 中撤消最近的本地提交?

简介: 如果不小心将错误的文件提交到 Git,但尚未将提交推送到服务器。如何从本地仓库撤消这些提交?你完成了一次简单的提交 git 操作,但经过一些推送前的检查,发现存在很多问题,需要重新修改,需要撤消此次操作。如果,你是一个很熟悉 git 操作的人来说,这很简单,反之,希望你能好好看看此文。

你完成了一次简单的提交 git 操作,但经过一些推送前的检查,发现存在很多问题,需要重新修改,需要撤消此次操作。如果,你是一个很熟悉 git 操作的人来说,这很简单,反之,希望你能好好看看此文。

git 中的 head 与本地文件的关系

HEAD 是当前分支引用的指针,它总是指向某次commit,默认是上一次的commit。 这表示 HEAD 将是下一次提交的父结点。 通常,可以把 HEAD 看做你的上一次提交的快照。当然HEAD的指向是可以改变的,比如你提交了commit,切换了仓库,分支,或者回滚了版本,切换了tag等。
从这一点来看,head 和本地文件的状态可以说存在千丝万缕关系,但,我们不能说,head 的指针指向的文件状态和当前文件的状态一致,这得取决于你每一次的 git 操作。为方便说明,作以下假设:
假设你有这个,其中 C 是你的 HEAD,(F)是你的文件的状态。A、B 都是之前的提交状态。

   (F)
A-B-C
    ↑
  master

现在有以下几种撤销 C 提交的方案可以选择:

  1. 在撤销 C 提交后,保留 C 提交时的文件状态
  2. 在撤销 C 提交后,不保留 C 提交时的文件状态

方案一:git reset --hard

由于 C 提交方案彻底错误,无需在原文件上继续修改,需要回到某个提交状态下,才能继续修改,故在撤销 C 提交后,不保留 C 提交时的文件状态,如下:

 (F)
A-B
  ↑
master

操作方法:git reset --hard HEAD~1

方案二:git reset --soft

或许,C 提交方案并不是完全不可取,而是需要在其现有基础上进行修改,但并不需要保留过多提交的中间过程,所以需要回退到某次提交版本,并保留当前文件状态,即在撤销 C 提交后,不保留 C 提交时的文件状态。如下:

   (F)
A-B-C
  ↑
master

操作方法: git reset --soft

补救措施

如果,进行撤销操作后,又发现,其实 C 提交也有可取之处,需要回退此次提交,那该怎么办呢?

  1. 查找提交的所有提交修改记录的哈希ID:git reflog
  2. 恢复了该提交::git checkout -b someNewBranchName shaYouDestroyed

注:提交实际上不会在大约 90 天内在 Git 中被销毁,因此通常可以返回并挽救一个不想删除的提交。

目录
相关文章
|
数据采集 运维 数据管理
数据管理能力成熟度模型
为促进大数据产业持续深入发展,提高政府、企事业单位大数据资产管理意识,借鉴国内外成熟度相关理论思想,结合数据生命周期管理各个阶段的特征,对数据管理能力进行了分析、总结,提炼出组织数据管理的八大过程域,并对每项能力进行了二级过程域和发展等级的划分以及相关功能介绍和评定标准的制定。
2253 1
|
传感器 机器学习/深度学习 人工智能
苏黎世理工最新!maplab2.0:模块化的多模态建图定位框架
将多传感器模态和深度学习集成到同时定位和mapping(SLAM)系统中是当前研究的重要领域。多模态是在具有挑战性的环境中实现鲁棒性和具有不同传感器设置的异构多机器人系统的互操作性的一块垫脚石。借助maplab 2.0,这个多功能的开源平台,可帮助开发、测试新模块和功能,并将其集成到一个成熟的SLAM系统中。
苏黎世理工最新!maplab2.0:模块化的多模态建图定位框架
|
人工智能 数据可视化 测试技术
如何从海量数据中精准提取关键信息,并让Agent更智能地理解用户意图?让模型推理成为Agent开发者的‘超级助手’?
本文产品专家三桥君探讨了AI Agent开发中的核心推理场景与实用技巧,帮助开发者提升模型智能水平。涵盖关键场景:模糊信息处理、海量数据提炼、复杂文档解析、多阶段任务规划、跨模态视觉推理、代码审查及智能评估。同时提出实用技巧:简洁指令设计、避免分步诱导、结构化信息分隔、显式约束声明及动态迭代优化。
672 0
|
人工智能 自然语言处理 JavaScript
Univer:开源全栈 AI 办公工具,支持 Word、Excel、PPT 等文档处理和多人实时协作
Univer 是一款开源的 AI 办公工具,支持 Word、Excel 等文档处理的全栈解决方案。它具有强大的功能、高度的可扩展性和跨平台兼容性,适用于个人和企业用户,能够显著提高工作效率。
3895 9
Univer:开源全栈 AI 办公工具,支持 Word、Excel、PPT 等文档处理和多人实时协作
|
JSON 安全 API
通用图片搜索-搜狗源免费API接口使用指南
本文介绍接口盒子(apihz.cn)提供的搜狗图片搜索免费API,支持通过关键词获取图片搜索结果,适用于图片采集、内容分析等场景。提供请求地址、参数说明、返回示例及调用注意事项。
1116 1
|
数据采集 人工智能 分布式计算
《Java 与大数据框架:AI 数据预处理的强力联盟》
在人工智能领域,数据预处理是确保模型准确性和高效性的关键。Java 与 Hadoop、Spark 等大数据框架的结合,为处理海量数据提供了强大的支持。通过 Java 编写的 MapReduce 和 Spark 程序,可以高效进行数据清洗、转换和特征提取,充分利用分布式计算能力,缩短预处理时间,提升数据质量。Java 在整合这些框架时,不仅实现了任务调度和错误处理,还为未来的优化和技术进步奠定了基础。这一组合为 AI 数据预处理带来了高效的解决方案,推动了人工智能技术的发展。
639 18
|
缓存 前端开发 JavaScript
前端开发的必修课:如何让你的网页在弱网环境下依然流畅运行?
【10月更文挑战第30天】随着移动互联网的普及,弱网环境下的网页性能优化变得尤为重要。本文从了解弱网环境、优化资源加载、减少HTTP请求、调整弱网参数和代码优化等方面,提供了详细的指南,帮助前端开发者提升网页在弱网环境下的性能,改善用户体验。
1279 3
|
缓存 网络协议 网络性能优化
TCP传输协议与UDP传输协议的特点与分析
网络协议如同人与人之间相互交流是需要遵循一定的规则(如语言)一样,计算机之间能够进行相互通信是因为它们都共同遵守一定的规则,即网络协议。 OSI参考模型和TCP/IP模型在不同的层次中有许多不同的网络协议,如图所示: 我们今天主要讨论的是传输层的协议,即考虑应用程序之间的逻辑通信。简单来说就是数据该如何发送给其他机器;
22917 3
TCP传输协议与UDP传输协议的特点与分析

热门文章

最新文章