Git系列之Git Reset

embedded/2025/2/27 18:59:59/

目录

Git Reset

归属系列:


Git Reset

git中最常用的命令,但也是最危险,最容易被误用的命令。

git reset [<mode>] [<commit ID>], it means thatgit reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit ID>

This form “git reset” resets the current branch head to <commit> and possibly updates the index (resetting it to the tree of <commit>) and the working tree depending on <mode>. If <mode> is omitted, defaults to --mixed. The <mode> must be one of the following:

该格式的“git reset”重置当前的head到commit,可能更新索引(重置到commit树),工作树(工作目录)取决于模式mode。如果模式省去,则默认为mixed模式。模式必须是以下几种。

 

关于上图的名词解释:Working Copy 当前工作(树)目录下的文件,一般而言:有修改,既没有git add,也没有git commit的文件

  1. Index: staging area(暂存区)文件, 即git add 添加后的文件, 但没有git commit。文件commit之后,它就是当前HEAD的父节点。
  2. HEAD: 指向当前branch最新的commit,即该分支最近一次commit后的节点
  1. 当你首次checkout一个新的分支,HEAD默认指向该分支上最近一次commit。它的index和working copy是一样的(未曾有文件被改动)。
  2. 当你修改了一个文件,git会标记改动的文件,working copy不再和index和HEAD相同。
  3. 当你执行git add命令,会将上面修改的文件缓存在index中,此时working copy和index相同,而他们和HEAD不同。
  4. 当你执行git commit后,Git创建了一个新的commit,HEAD这时指向这个新的commit,此时,HEAD & index & working copy相同。

Git reset主要的参数有soft、 mixed、hard, 它们告诉Git,当执行reset时,要对index和working copy做什么。

  • --soft

不改变index和工作树的内容,只将HEAD重置到commit(就像所有模式都做的一样)。这使得你所有变更的文件变成“有改变需要被提交”。

For example, git reset --soft [commit ID] 回退到某个版本,只回退了commit的信息。如果还要提交,直接commit即可

  • --mixed(default)

If -N is specified, removed paths are marked as intent-to-add (see git-add [1]).

重置Head和index,但不影响工作树(当前工作目录下改动的文件被保留,但不会被标记用来commit),并且报告哪些没有被更新。这是默认行为。

指向那个你要reset到的commit上。而working copy文件不被改变。当然会显示工作目录下有修改,但没有缓存到index中。

Note: 用于重置暂存区的文件与某次历史提交(commit)保持一致,工作区文件内容保持不变

  • --hard

重置HEAD & index & working copy(同时改变到你要reset到的那个commit上)。Commit之后任何改变的文件都会被丢弃。这个参数很危险,你的本地修改可能都会丢失。

  • --merge

Resets the index and updates the files in the working tree that are different between <commit> and HEAD, but keeps those which are different between the index and working tree (i.e. which have changes which have not been added). If a file that is different between <commit> and the index has unstaged changes, reset is aborted.

In other words, --merge does something like a git read-tree -u -m <commit>, but carries forward unmerged index entries.

  • --keep

Resets index entries and updates files in the working tree that are different between <commit> and HEAD. If a file that is different between <commit> and HEAD has local changes, reset is aborted.

  • --[no-]recurse-submodules

When the working tree is updated, using --recurse-submodules will also recursively reset the working tree of all active submodules according to the commit recorded in the superproject, also setting the submodules' HEAD to be detached at that commit

注意:

  1. commitId 是每次commit的id,可以通过git log来进行获取
  2. 恢复git reset —hard 的误操作

如果通过 git reset --hard将版本回退到之前的commit。可以先通过 git reflog命令,找到要退回的commit Id,然后通过命令git reset —hard commit Id来恢复。

  1. git revert 和 git reset的区别
  2. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  3. 就回滚这一操作上,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit “中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。
  4. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
  5. 将本地某个分支强制更新到远程分支最新的commit
git checkout -b <branchname>git reset --hard origin/<branchname>

归属系列:

LINK:<li><a href="文章链接">文章标题</a></li>


http://www.ppmy.cn/embedded/167606.html

相关文章

Gartner发布安全地响应 DeepSeek指南:DeepSeek相关关键安全挑战及其安全控制措施

本研究探讨了与 DeepSeek 相关的安全风险&#xff0c;为安全和风险管理领导者提供了有针对性的策略来缓解这些威胁。它提供了可行的措施来加强基于现有安全控制的 AI 保护。 主要发现 了解 DeepSeek 当前的安全状况。DeepSeek的采用激增暴露了关键的安全挑战&#xff0c;包括模…

Logic-RL: 小模型也能强推理,通过基于规则的强化学习提升大语言模型结构化推理能力

这篇论文探讨了基于规则的强化学习&#xff08;RL&#xff09;如何解锁LLM中的高级推理能力。通过在受控的逻辑谜题上进行训练并强制执行结构化的思考过程&#xff0c;即使是相对较小的模型也能开发出可转移的问题解决策略。这种方法不仅提高了逻辑任务的性能&#xff0c;而且在…

Linux基础开发工具的使用(apt、vim、gcc、g++、gdb、make、makefile)

Linux软件包管理器–apt Linux安装软件的方式 在Linux下安装软件的方法有以下三种&#xff1a; 下载到程序的源代码&#xff0c;自己编译出可执行程序获取deb安装包、然后使用dpkg命令安装。&#xff08;不解决依赖关系&#xff09;通过apt进行安装软件。 小知识点&#xf…

[python脚本]论文1.(一)CPU/内存数据分析和分组

CPU 收集到的CPU数据&#xff0c;格式如下&#xff1a; 由于这里6个数据为一组来收集latency的数据以及各个分位值的数据&#xff0c;而本质上每一行都是一次完整的测试&#xff0c;因此这里将这个csv文件分为两个文件&#xff0c;第一个是和latency相关的&#xff0c;将6条数…

六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战

欢迎来到编程星辰海的博客讲解 目录 一、语义化标签的核心价值 1.1 什么是语义化&#xff1f; 1.2 核心优势 二、语义标签详解与使用场景 2.1 布局容器标签 2.2 内容组织标签 三、博客结构搭建实战 3.1 完整HTML结构 3.2 核心结构解析 3.3 实现效果说明 四、学习要点…

未来技术的边界:机器学习如何塑造我们的世界

目录 机器学习与量子计算的融合 无处不在的边缘计算 AI增强现实与虚拟现实的深度融合 自适应机器学习&#xff1a;让AI变得更“聪明” 人机协作&#xff1a;AI赋能人类的工作方式 结语 随着科技的不断进步&#xff0c;我们正站在一个全新的时代的门槛上。在这个充满机遇和…

以绘图(绘制点、直线、圆、椭圆、多段线)为例子 通过设计模式中的命令模式实现

为了在命令模式的基础上实现撤销&#xff08;Undo&#xff09;和回退&#xff08;Redo&#xff09;功能&#xff0c;我们可以在每个命令类中记录一些必要的状态&#xff0c;允许我们撤销之前的操作&#xff0c;并在需要时回退操作。常见的做法是使用一个命令堆栈来存储历史命令…

使用 LangChain 和 Milvus 构建测试知识库

LangChain 是一个强大的框架&#xff0c;可以与向量数据库&#xff08;如 Milvus&#xff09;无缝集成&#xff0c;用于构建基于检索的增强生成&#xff08;RAG&#xff09;系统。在测试工程师的场景中&#xff0c;可以将测试资产&#xff08;如需求文档、测试用例、缺陷报告等…